动态年龄段统计??

gzd03 2010-10-14 02:14:04

以前用 case when 的方式划分好年龄段,这就有一个问题,年龄分组写死了,如何实现年龄段的动态分组?

如输入 起始年龄(25),统计基数(10),结束年龄(60),这样按25岁以下,25-35,…… 60以上的方式分组,这样就不用 修改原有sql了
...全文
65 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
fpzgm 2010-10-14
  • 打赏
  • 举报
回复


--创建函数
create function fnAge(@age int)
returns varchar(10)
as
begin
declare @bage int, @eage int, @base int,@groupage int,@returnage varchar(10)
select @bage = 25, @eage = 74, @base=10
select @groupage=(@eage-@bage+1)/@base

select @returnage=
case
when @age< @bage then '<'+cast(@bage as varchar(3))
when @age> @eage then '>'+cast(@eage as varchar(3))
else cast(@bage+(@age-@bage)/@groupage*@groupage as varchar(3))+'-'+
cast(@bage+(@age-@bage)/@groupage*@groupage+@groupage-1 as varchar(3))
end
return @returnage
end


--测试
select dbo.fnAge(10),dbo.fnAge(25),dbo.fnAge(31),dbo.fnAge(46),dbo.fnAge(74),dbo.fnAge(75)

--结果

--------------------------------
<25 25-29 30-34 45-49 70-74 >74
coleling 2010-10-14
  • 打赏
  • 举报
回复
你可以先建一个表变量,如:
declare table @tb(id int identity(1,1), startage int, endage int)
然后将分段后年龄插入该表变量,如
insert @tb values (0,25)
insert @tb values (25,35)
...
insert @tb values (65,500)
最后,将要统计的表和表变量联接后分组即可。如
select .....
from 表 a
join @tb b on a.age > b.startage and a.age <= b.endage
group by b.id
SQLCenter 2010-10-14
  • 打赏
  • 举报
回复
declare @bage int, @eage int, @base int
select @bage = 25, @eage = 60, @base=10

case
when age < @bage then ?
when age > @eage then ?
else (age-@bage)/@base
end
SQLCenter 2010-10-14
  • 打赏
  • 举报
回复
case
when age < @bage then ?
when age > @eage then ?
else (age-@bage)/@base
end

22,206

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧