用条形图显示年龄范围的人数
问题描述:
我有一张有成千上万条记录的表格,样本如下。用条形图显示年龄范围的人数
只有[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
.....
.....
等等,如果年龄的人出现在表中。
答
请尝试以下查询
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
更新:根据自定义的范围,你应该使用这种查询
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
答
这似乎为工作我
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,那么我想你也需要通过
是被示出的结果如下:计算 -825--824 399-400 594-595 947-948 1290年至1291年2 \t 1678年至1616年 年龄范围79 2384-2385 2673-2674 我需要10年的日期范围来代替。非常感谢您的快速响应。 – Simant
@DPBhatt我已经更新了我的答案。如果您发现它有用,请接受和/或注册它,以便类似问题的未来搜索者发现此问题很有用。 [https://*.com/help/someone-answers] – DhruvJoshi
@DPBhatt我发现你的范围不正确,你以'0-10'开头,然后是'11-20'......你是否需要这个或'0-9','10-19'或'1-10','11-20' – DhruvJoshi