【问题标题】:Microsoft SQL-Apply "Where" Clause to Particular ColumnsMicrosoft SQL-将“Where”子句应用于特定列
【发布时间】:2013-08-23 17:25:25
【问题描述】:

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

【问题讨论】:

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


    【解决方案1】:

    删除 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
    

    【讨论】:

      猜你喜欢
      • 2014-07-15
      • 2021-06-03
      • 2020-11-02
      • 1970-01-01
      • 2021-01-17
      • 1970-01-01
      • 2023-03-12
      • 2017-11-05
      • 1970-01-01
      相关资源
      最近更新 更多