2013-02-25 282 views
0

列變量我試圖轉換birthyears年齡區間組算作在SQL

Id | Birthyear 
------------------ 
    1 | 1984 
    2 | 1945 
    3 | 1996  
    4 | 1921 
    5 | 1977 
    6 | 1996 
    7 | 1988 
    8 | 1956 
    9 | 1961 
    10 | 1987 

到一定的年齡區間的組數的清單,列變量

0-20 | 21-40 | 41-60 | 61 - 100 
------------------------------------- 
    1 | 4 | 2 |  2 

,但我的努力已經徒然

declare @datum datetime 
set @date = convert(datetime, '20130225')  

SELECT 
SUM(CASE WHEN datediff(d, Birthyear, @date)/365.25) < 20 THEN 1 ELSE 0 END) [0-20], 

是否有一個技巧呢?

SQLFiddle

回答

2

因爲它看起來像你只有一年的時間,我只想與本年度比較爲整數:

;WITH Ages AS 
(
    SELECT YEAR(getdate()) - Birthyear AS Age 
    FROM people 
) 
SELECT SUM(CASE WHEN Age BETWEEN 0 AND 20 THEN 1 ELSE 0 END) AS [0-20], 
    SUM(CASE WHEN Age BETWEEN 21 AND 40 THEN 1 ELSE 0 END) AS [21-40], 
    SUM(CASE WHEN Age BETWEEN 41 AND 60 THEN 1 ELSE 0 END) AS [41-60], 
    SUM(CASE WHEN Age BETWEEN 61 AND 100 THEN 1 ELSE 0 END) AS [61-100] 
FROM Ages 

SQL Fiddle