2016-04-15 83 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,那麼我想你也需要通過

更改組
相關問題