Tes*_*est 4 sql-server-2008 sql-server
我想看数据如下
Member Age Category
Test1 25 Under 30
Test2 55 51-60
Test3 67 Above 60
Run Code Online (Sandbox Code Playgroud)
我使用了以下查询(来自我上一个问题的答案)根据出生日期和当前日期计算年龄,然后将每个年龄归类到一个名称下。
此查询正在创建单独的列,而不是我想查看一列下的所有类别,以便我可以对该类别列进行分组
WITH AgeData as
(
SELECT
Username,
Birthdate,
DATEDIFF(YEAR, birthdate, GETDATE()) AS AGE
FROM @Table)
SELECT
Username,
Birthdate,
Age,
CASE
WHEN AGE < 30 THEN 1
ELSE 0
END AS 'Under 30',
CASE
WHEN AGE BETWEEN 31 AND 40 THEN 1
ELSE 0
END AS '31 - 40',
CASE
WHEN AGE BETWEEN 41 AND 50 THEN 1
ELSE 0
END AS '41 - 50',
CASE
WHEN AGE > 50 THEN 1
ELSE 0
END AS 'Over 50'
FROM AgeData
Run Code Online (Sandbox Code Playgroud)
不是使用多个CASE表达式,每个组一个,只需将它们组合成一个表达式。然后,在THEN子句中,您可以使用更具描述性的内容稍后进行分组。在下面的示例中,我使用了您提供的列别名。
WITH AgeData as
(
SELECT [Username],
[Birthdate],
DATEDIFF(YEAR, [Birthdate], GETDATE()) AS [AGE]
FROM @table
),
GroupAge AS
(
SELECT [Username],
[Birthdate],
[Age],
CASE
WHEN AGE < 30 THEN 'Under 30'
WHEN AGE BETWEEN 31 AND 40 THEN '31 - 40'
WHEN AGE BETWEEN 41 AND 50 THEN '41 - 50'
WHEN AGE > 50 THEN 'Over 50'
ELSE 'Invalid Birthdate'
END AS [Age Groups]
FROM AgeData
)
SELECT COUNT(*) AS [AgeGrpCount],
[Age Groups]
FROM GroupAge
GROUP BY [Age Groups];
Run Code Online (Sandbox Code Playgroud)