【发布时间】:2015-10-02 03:44:38
【问题描述】:
以下是我的查询:
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 的行,因为这些行是UNIONed 到相关查询中的。
为什么我在 TimePeriodID 中得到一个 NULL 而应该是 6?
请注意,结果总数是正确的,并且表格中有日期满足条件为6。
我对此感到茫然。
额外的眼睛会很棒。
谢谢。
【问题讨论】:
标签: sql-server case aggregate-functions