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
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 11 的頭像
    11

    冠霖的部落格

    11 發表在 痞客邦 留言(1) 人氣()