2013-02-25 278 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