我正在尝试获取一个人的总录音时间超过一定金额的天数。现在,我只能获得一列准确数据的天数(我目前在所有日期列中都有超过60天。基本上我想为所有没有任何日期的人返回0长度增量。我还希望获得具有以这些增量记录长度的天数的所有增量的天数。
基本上我希望在定义列时我可以将“Where”子句与列名放在一起。(我知道它不起作用)解决这个问题的最佳方法是什么?
这是我的代码:
WITH CTERecordingsByDate AS
(
SELECT Person.FirstName,
Person.LastName,
CAST(Created AS DATE) AS Whole_Date,
SUM(Length)/60 AS Recordings_Sum, --Length is in seconds
FROM Recordings
JOIN Person ON Recordings.PersonID=Person.ID
WHERE Created BETWEEN '2013-07-01 00:00:00.000'
AND '2013-08-01 00:00:00.000'
GROUP BY Person.FirstName,
Person.LastName,
CAST(Created AS DATE)
)
SELECT FirstName,
LastName,
COUNT(*) AS DaysAbove60
COUNT(*) AS DaysAbove100
COUNT(*) AS DaysAbove140
FROM CTERecordingsByDate
WHERE Recordings_Sum >= 60
AND Recordings_Sum < 100
GROUP BY FirstName, LastName
ORDER BY COUNT(*) DESC
答案 0 :(得分:2)
删除WHERE子句并在COUNT函数中使用CASE:
COUNT(case when Recordings_Sum >= 60 AND Recordings_Sum < 100 then 1 end) AS DaysAbove60
COUNT(case when Recordings_Sum >= 100 AND Recordings_Sum < 140 then 1 end) AS DaysAbove100
COUNT(case when Recordings_Sum >= 140 then 1 end) AS DaysAbove140