SQL Server 的 PIVOT
及 UNPIVOT
運算子用來將資料表中的欄轉置為列、列轉置為欄,將資料表中指定的欄位做旋轉,因為經常用到的時候就要再 Google 一次,所幸就自己寫一篇記錄一下,而且在轉置的過程中還順便彙總,一個常看到的範例就是計算銷售人員 1 ~ 12 月的銷售金額,並將 1 ~ 12 月當做欄位名稱 SELECT 出來,除此之外還可以拿來對付一些特別的設計。
我們公司的資料表中,前人們做了一個類似排程的設計,但是卻將排程時間設計成欄位。
這樣的設計除了少了點彈性之外(多一個時段就要再加一個欄位),當資料撈進 C# 的之後要處理就稍微麻煩了一點,因為欄位名稱是數字開頭而且還包含冒號,沒辦法宣告一個屬性來對應這樣的欄位名稱,完全無法享受到強型別的方便。
UNPIVOT
面對這個問題我就用 UNPIVOT 將欄轉置成列,因此原本被指定轉置的欄位就不見了,所以我們必須創造新的欄位,在本篇文章的例子中就創造了兩個新的欄位:Enabled
、Timing
,我們來看一下結果。
PIVOT
那 PIVOT 就是將列轉置成欄,用法就跟 UNPIVOT 一樣簡單,但是有兩點要注意的就是 FOR
前面接的是一個彙總函式(Aggregation Function),再來就 IN
裡面轉置後的欄位名稱只能手動輸入。