SELECT CASE 语句的意外 NULL 结果

Unexcpected NULL result with SELECT CASE statement

以下是我的查询:

DECLARE
    @ThisYear INT = CAST(DATEPART(yy, GETDATE()) AS INT) 
    ,@LastYear INT = CAST(DATEPART(yy, GETDATE()) - 1 AS INT)

SELECT
    CASE WHEN CAST(DATEPART(yy, mq.[qDate]) AS INT)   = @ThisYear THEN 5
            WHEN CAST(DATEPART(yy, mq.[qDate]) - 1 AS INT) = @LastYear THEN 6 END AS 'TimePeriodID'
    ,Name = 'QueryTotals'
    ,SUM(CASE WHEN dQuery = 1 THEN 1 ELSE 0 END) AS 'DefaultQuery'
    ,SUM(CASE WHEN dQuery = 0 THEN 1 ELSE 0 END) AS 'Non-DefaultQuery'
    ,COUNT(dQuery) AS 'TotalQueries'
FROM 
    mQuery mq
INNER JOIN 
    mParameter mp
    ON
    mq.id = mp.id
INNER JOIN 
    Variable v
    ON
    mp.id = v.id
WHERE 
    v.id <= 10
GROUP BY
    CASE WHEN CAST(DATEPART(yy, mq.[qDate]) AS INT)   = @ThisYear THEN 5
            WHEN CAST(DATEPART(yy, mq.[qDate]) - 1 AS INT) = @LastYear THEN 6 END

以下是我的结果截图:

请忽略带有 TimePeriodID = 1, 2, 3, 4 的行,因为这些行已 UNION 编辑到相关查询中。

为什么我在 TimePeriodID 中得到 NULL 而它应该是 6

请注意,结果总计是正确的,并且 table 中的日期满足条件 6

我对此一头雾水

再多一只眼睛就好了。

谢谢。

这样的组合语句:

DECLARE
    @ThisYear INT = CAST(DATEPART(yy, GETDATE()) AS INT) 
    ,@LastYear INT = CAST(DATEPART(yy, GETDATE()) - 1 AS INT)

SELECT
    CASE WHEN CAST(DATEPART(yy, mq.[qDate]) AS INT)   = @ThisYear THEN 5
            WHEN CAST(DATEPART(yy, mq.[qDate]) - 1 AS INT) = @LastYear THEN 6 END AS 'TimePeriodID'

使得第二种情况永远不可能成立。如果第一个演员 != @ThisYear,那么第二个演员(即第一个 - 1)不能 == @LastYear,因为 @LastYear = @ThisYear - 1.

原来如此。解决方案不清楚,因为您没有展示您要做什么。