使用 TSQL PIVOT 查詢多資料列轉為單資料列 (含非 PIVOT 方式)

使用 TSQL PIVOT 查詢多資料列轉為單資料列 (含非 PIVOT 方式)

在某些狀況,必須將查詢出來多筆資料改為單筆呈現的加總方式,例如以Northwind為例,查詢出來各種 TitleOfCourtesy 在員工Employees裡面的比例。


FROM dbo.Employees
GROUP BY TitleOfCourtesy

image

我們希望達成將資料輸出的時候,是一列(筆)就完整的輸出,可以透過以下兩個方式

  1. PIVOT

    
    [Dr.],[Mr.],[Mrs.],[Ms.]
    FROM
    (SELECT Title,TitleOfCourtesy
        FROM  dbo.Employees ) AS SourceTable
    PIVOT
    (
    COUNT(Title)
    FOR TitleOfCourtesy IN ([Dr.],[Mr.],[Mrs.],[Ms.])
    ) AS PivotTable;


    image

  2. CASE WEHN

        SUM(CASE WHEN TitleOfCourtesy = 'Dr.' THEN 1 ELSE 0 END ) AS [Dr.] 
        ,SUM(CASE WHEN TitleOfCourtesy = 'Mr.' THEN 1 ELSE 0 END ) AS [Mr.] 
        ,SUM(CASE WHEN TitleOfCourtesy = 'Mrs.' THEN 1 ELSE 0 END ) AS [Mrs.]
        ,SUM(CASE WHEN TitleOfCourtesy = 'Ms.' THEN 1 ELSE 0 END ) AS [Ms.]
  FROM dbo.Employees

image


PIVOT 的使用限制則是必須是 SQL 2005 (含)以上的資料庫版本,PIVOT 更多詳細的應用,可以參考 SQL 線上叢書的說明。

參考:

使用 PIVOT 和 UNPIVOT http://technet.microsoft.com/zh-tw/library/ms177410.aspx