具有年龄范围的人的计数以条形图显示

时间:2016-04-15 15:23:13

标签: sql-server tsql

我有一张包含数千条记录的表格,下面给出了样本。

表格中只有[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 个答案:

答案 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开始,那么我认为您还需要通过

更改组