0

生年のリストを変換しようとしています

  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

4

1 に答える 1

2

1年しかないように見えるので、整数として現在の年と比較します。

;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フィドル

于 2013-02-25T08:51:13.133 に答える