[食譜好菜] 用 SQL Server 的 PIVOT 和 UNPIVOT 將列轉置為欄、欄轉置為列。

SQL Server 的 PIVOTUNPIVOT 運算子用來將資料表中的欄轉置為列、列轉置為欄,將資料表中指定的欄位做旋轉,因為經常用到的時候就要再 Google 一次,所幸就自己寫一篇記錄一下,而且在轉置的過程中還順便彙總,一個常看到的範例就是計算銷售人員 1 ~ 12 月的銷售金額,並將 1 ~ 12 月當做欄位名稱 SELECT 出來,除此之外還可以拿來對付一些特別的設計。

我們公司的資料表中,前人們做了一個類似排程的設計,但是卻將排程時間設計成欄位。

這樣的設計除了少了點彈性之外(多一個時段就要再加一個欄位),當資料撈進 C# 的之後要處理就稍微麻煩了一點,因為欄位名稱是數字開頭而且還包含冒號,沒辦法宣告一個屬性來對應這樣的欄位名稱,完全無法享受到強型別的方便。

UNPIVOT

面對這個問題我就用 UNPIVOT 將欄轉置成列,因此原本被指定轉置的欄位就不見了,所以我們必須創造新的欄位,在本篇文章的例子中就創造了兩個新的欄位:EnabledTiming,我們來看一下結果。

PIVOT

那 PIVOT 就是將列轉置成欄,用法就跟 UNPIVOT 一樣簡單,但是有兩點要注意的就是 FOR 前面接的是一個彙總函式(Aggregation Function),再來就 IN 裡面轉置後的欄位名稱只能手動輸入。

參考資料