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
到目前为止,我得到了范围(使用 CASE
和 DATEDIFF
),但我不知道如何对最终范围进行分组。
当尝试在新的 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
我有 table 支持票 - 有时间开放和时间结束。我想创建一个 table 范围,例如:
ticket count | time to close
----------------------------------
30 | up to 2 hours
25 | 2 - 4 hours
10 | 4 - 6 hours
到目前为止,我得到了范围(使用 CASE
和 DATEDIFF
),但我不知道如何对最终范围进行分组。
当尝试在新的 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