以下我的查询似乎未检测到将未来年份作为无效年龄范围的多宝。任何人都可以对需要更改的内容发表一些见解吗?
WITH AgeData as
(
SELECT [sex],
[dob],
DATEDIFF(YEAR, [dob], GETDATE()) AS [AGE]
FROM dbo.Farmers
),
GroupAge AS
(
SELECT [sex],
[dob],
CASE
WHEN AGE < 24 THEN '24 and Under'
WHEN AGE BETWEEN 25 AND 30 THEN '25 - 30'
WHEN AGE BETWEEN 31 AND 40 THEN '31 - 40'
WHEN AGE BETWEEN 41 AND 50 THEN '41 - 50'
WHEN AGE > 50 THEN '50 and Over'
ELSE 'Invalid Birthdate'
END AS [Age Groups]
FROM AgeData
)
SELECT
[Age Groups],
COUNT(CASE WHEN sex = 1 THEN 1 END) AS [Female Farmers],
COUNT(CASE WHEN sex = 2 THEN 2 END) AS [Male Farmers]
FROM GroupAge
GROUP BY [Age Groups]
ORDER BY [Age Groups] ASC;
答案 0 :(得分:2)
CASE
语句在第一个有效参数处停止。
将来的日期随着年龄的增长是负数,因此总是小于24。
所以您应该更改第一个WHEN
:
WHEN AGE < 24 AND AGE >= 0 THEN '24 and Under'
答案 1 :(得分:2)
您的ELSE案件永远不会达成。更改您的CASE
表达式以仅在一个方向上评估比较,例如:
CASE
WHEN AGE > 50 THEN '51 and Over'
WHEN AGE > 40 THEN '41 - 50'
WHEN AGE > 30 THEN '31 - 40'
WHEN AGE > 24 THEN '25 - 30'
WHEN AGE >= 0 THEN '24 and Under'
ELSE 'Invalid Birthdate'
END AS [Age Groups]