未来日期未显示为无效年龄范围

时间:2018-09-04 16:36:44

标签: sql tsql

以下我的查询似乎未检测到将未来年份作为无效年龄范围的多宝。任何人都可以对需要更改的内容发表一些见解吗?

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;

2 个答案:

答案 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]
相关问题