SQL - 创建分组 'range' 集合

SQL - Creating a Grouped 'range' set

我有 table 支持票 - 有时间开放和时间结束。我想创建一个 table 范围,例如:

 ticket count   |    time to close 
----------------------------------
        30      |        up to 2 hours
        25      |         2 - 4 hours
        10      |         4 - 6 hours

到目前为止,我得到了范围(使用 CASEDATEDIFF),但我不知道如何对最终范围进行分组。 当尝试在新的 openTimeRange 计算列上 GROUP 时,错误当然是它是一个未知列。

SELECT COUNT([tblTickets].*),  DATEDIFF(hh,[dateOpened],[closeDate]) AS OpenTime

, case when  DATEDIFF(hh,[dateOpened],[closeDate]) between 0 and 2 then '0-2'
     when  DATEDIFF(hh,[dateOpened],[closeDate]) between 3 and 4 then '3-4'
     when  DATEDIFF(hh,[dateOpened],[closeDate]) between 5 and 6 then '4-6'
end as openTimeRange

FROM  [tblTickets]
WHERE closeDate is not null 
GROUP BY  [dateOpened],[closeDate] 

使用 MSSQL 2005 SP4

谢谢!

如您所述,如果您尝试 GROUP BY 原始查询中的 openTimeRange 别名列,您将收到错误消息。这样做的原因是 GROUP BY 子句在 别名分配给结果集之前被评估,因此您不能使用它。使用内联视图应该可以解决问题:

SELECT T.TicketCount, T.OpenTime, T.openTimeRange
FROM
(
    SELECT COUNT([tblTickets].*) AS TicketCount,
        DATEDIFF(hh,[dateOpened],[closeDate]) AS OpenTime,
        CASE WHEN DATEDIFF(hh,[dateOpened],[closeDate]) BETWEEN 0 AND 2 THEN '0-2'
             WHEN DATEDIFF(hh,[dateOpened],[closeDate]) BETWEEN 3 AND 4 THEN '3-4'
             WHEN DATEDIFF(hh,[dateOpened],[closeDate]) BETWEEN 5 AND 6 THEN '4-6'
        END AS openTimeRange
    FROM  [tblTickets]
    WHERE closeDate IS NOT NULL
    GROUP BY [dateOpened],[closeDate]
) T
GROUP BY T.openTimeRange