动态年龄段统计??

gzd03 2010-10-14 02:14:04

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

如输入 起始年龄(25),统计基数(10),结束年龄(60),这样按25岁以下,25-35,…… 60以上的方式分组,这样就不用 修改原有sql了
...全文
39 点赞 收藏 4
写回复
4 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2010-10-14 02:14
社区公告
暂无公告