我有下列數據的表:SQL服務器調換查詢結果
ItemId PendingTime
1 2016-11-23 15:57:56.000
2 2016-07-09 17:33:09.000
3 2015-11-27 18:34:03.000
等..
我想知道自去年30分鐘掛起項目的總和,去年1小時,最近1周,最近1個月和超過一年。我想出了以下查詢:
SELECT
SUM(CASE
WHEN datediff(MINUTE, PENDING_TIME,GETDATE()) <= 30
THEN 1 ELSE 0
END) AS '30 Min',
Sum(case when (datediff(MINUTE,PENDING_TIME, GETDATE())) > 30 AND (datediff(MINUTE,PENDING_TIME, GETDATE())) <= 60 then 1 Else 0 End) as 'Over 30 Min',
Sum(case when (datediff(MINUTE,PENDING_TIME, GETDATE())) > 60 AND (datediff(HOUR,PENDING_TIME, GETDATE())) <= 24 then 1 Else 0 End) as 'Over 1 Hr',
Sum(case when (datediff(DAY,PENDING_TIME, GETDATE())) > 1 AND (datediff(DAY,PENDING_TIME, GETDATE())) < 30 then 1 Else 0 End) as '1 month',
Sum(case when datediff(DAY,PENDING_TIME, GETDATE()) >= 30 then 1 Else 0 End) as 'More than month'
from ItemsTable where datepart(yyyy,PENDING_TIME) = DATEPART(yyyy,GETDATE())
這將返回數據:
30 Min Over 30 Min Over 1 Hr 1 month More than month
----------- ----------- ----------- ----------- ---------------
100 350 NULL NULL NULL
我想在2列格式的結果爲:
30 Min ------ 45
Over 30 ------ 100
Over 1 hr ------ null
Over 1 month ------ null
我知道的pivot函數,但是我選擇的列並不是真的在我正在選擇的表中,而是它們是作爲聚合函數的結果而創建的。
如何以2列和多行格式獲取此內容。
感謝您閱讀。
很好的解決方案。順便說一句,替代'WHERE'子句只有在有問題的表沒有未來日期的情況下才有效。 – wdosanjos
@wdosanjos優秀的一點。我認爲這種情況不會發生,但這可能是一個危險的假設。我已經編輯了相應的建議'WHERE'。 – mendosi
順便說一句,看看[這裏](http://stackoverflow.com/questions/13437362/how-to-get-first-and-last-date-of-current-year)的解決方案如何獲得一年中的第一天和最後一天沒有字符串操作。 (yy,DATEDIFF(yy,0,getdate()),0)和PENDING_TIME
wdosanjos