close
PIVOT: 好物...記下來
可以把統計的RESULT 整合在一列...讚~
直接引用黑大的 XD
FROM :TIPS-Using PIVOT In SQL 2005 - 黑暗執行緒
這篇也不錯 :
http://rely1020.blog.ithome.com.tw/post/1606/39111
TIPS-Using PIVOT In SQL 2005
遇到一個可以應用SQL 2005 PIVOT新功能的好例子,拿出來分享一下。
分析IIS Log時,我希望統計每一秒鐘不同執行結果(Status Code=200, 304, 401, 404, 500 ...)的次數,由IISLog匯入而成的Table可以找到LogTime與StatusCode兩個欄位。
要統計每秒不同StatusCode的數量不難,例如以下的T-SQL:
排版顯示純文字
SELECT LogTime, StatusCode, Count(*) As Cnt
FROM IISLogTable
GROUP BY LogTime, StatusCode
ORDER BY LogTime
查出的結果會像這樣:
LogTime StatusCode Cnt -------- ---------- ----------- 06:40:05 200 5 06:40:05 302 1 06:40:06 304 1 06:40:06 200 10 06:40:07 200 5 06:40:07 500 3 06:40:08 200 11 06:40:08 404 1
但在實際應用時,我們會希望將每秒鐘的各StatusCode整合在一列中,像LogTime, StatusCode, Count200, Count302, Count304, Count401...的形式,以方便用Excel製表或繪圖,但這少不了要費一番手腳。
當使用的資料庫是SQL 2005時,我們多了一項新武器---PIVOT! 用如下的語法,就可以將以上的結果由列轉成欄,變成我們要的樣子。
排版顯示純文字
SELECT * FROM
(
SELECT LogTime, StatusCode, COUNT(*) AS Cnt
FROM IISLogTable
GROUP BY LogTime, StatusCode
) AS X
PIVOT
(
SUM(Cnt)
FOR StatusCode IN
([200],[302],[304],[401],[404],[500])
) AS PVT
查詢結果變成:
LogTime 200 302 304 401 404 500 -------- ----------- ----------- ----------- ----------- ----------- ----------- 06:40:05 5 1 NULL NULL NULL NULL
06:40:06 10 NULL 1 NULL NULL NULL 06:40:07 5 NULL NULL NULL NULL 3
06:40:08 11 NULL NULL NULL 1 NULL
全站熱搜
留言列表