2016-04-15 81 views
2

我有一张有成千上万条记录的表格,样本如下。用条形图显示年龄范围的人数

只有[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 
..... 
..... 

等等,如果年龄的人出现在表中。

回答

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 
+0

是被示出的结果如下:计算 -825--824 399-400 594-595 947-948 1290年至1291年2 \t 1678年至1616年 年龄范围79 2384-2385 2673-2674 我需要10年的日期范围来代替。非常感谢您的快速响应。 – Simant

+0

@DPBhatt我已经更新了我的答案。如果您发现它有用,请接受和/或注册它,以便类似问题的未来搜索者发现此问题很有用。 [https://stackoverflow.com/help/someone-answers] – DhruvJoshi

+0

@DPBhatt我发现你的范围不正确,你以'0-10'开头,然后是'11-20'......你是否需要这个或'0-9','10-19'或'1-10','11-20' – DhruvJoshi

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,那么我想你也需要通过

更改组
相关问题