Microsoft SQL - 将“Where”子句应用于特定列

时间:2013-08-23 17:25:25

标签: sql sql-server join where with-statement

我正在尝试获取一个人的总录音时间超过一定金额的天数。现在,我只能获得一列准确数据的天数(我目前在所有日期列中都有超过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

1 个答案:

答案 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