我有一张包含数千条记录的表格,下面给出了样本。
表格中只有[DateOfBirth]
字段,我需要计算总年数的年龄范围:
ID Name DateOfBirth
1 John 1980-11-20 00:00:00.000
2 Denial 1940-04-10 00:00:00.000
3 Binney 1995-12-25 00:00:00.000
4 Sara 1960-11-20 00:00:00.000
5 Poma 1980-11-20 00:00:00.000
6 Cameroon 1980-11-20 00:00:00.000
.....
.....
我需要编写SQL查询以显示输出10年龄范围,以使其适合条形图。
AgeRange Count
1-10 100
11-20 200
21-30 400
31-40 0
41-50 800
51-60 700
61-70 200
.....
.....
等等,如果年龄的人在表中。
答案 0 :(得分:2)
请尝试以下查询
select
cast( 1 + DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 *10 as varchar)+ '-'+ cast(10+ DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 *10 as varchar) as AgeRange
,
count(1) as count
from tbl
group by
DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10
的 Demo link here 强>
更新:根据您的自定义范围,您应该使用此查询
select
cast(case when
DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 =0
then 0
else
1 end+ DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 *10 as varchar)+ '-'+ cast(10+ DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10 *10 as varchar) as AgeRange
,
count(1) as count
from tbl
group by
DateDiff(YY,DATEADD(YY,-1,DateOfBirth),getdate())/10
答案 1 :(得分:0)
这似乎对我有用
SELECT count(*) as [count]
, cast(datediff(YYYY, value, getdate())/10 * 10 as varchar(10)) + ' - ' +
cast(datediff(YYYY, value, getdate())/10 * 10 + 9 as varchar(10)) as range
FROM [docSVdate]
group by datediff(YYYY, value, getdate())/10
order by datediff(YYYY, value, getdate())/10 desc
这个从0开始然后只添加9
你需要保持一致,因为0-10是11的范围
如果您需要从1开始,那么我认为您还需要通过