Sql Server中不經常使用的表運算符之UNPIVOT

Sql Server中不經常使用的表運算符之PIVOT中,介紹了PIVOT表運算符,如今來講說與之相對應的另外一個表運算符UNPIVOT。html

從名字能夠看出,這個運算符的做用與PIVOT恰好相反,是將一行的多個列值旋轉爲多行,每一行是一個原列的值。spa

Sql Server中不經常使用的表運算符之PIVOT中最後的表結果爲例,來演示一下如何使用UNPIVOT運算符code

上面這張表中顯示了 C001,C002,C003這三個消費者在不一樣城市不一樣地區的訂單數量,經過下面的查詢將C001,C002,C003這三列旋轉爲行。htm

SELECT * FROM Ptable
    UNPIVOT(
        num_orders FOR 
            Customer IN (
                C001,
                C002,
                C003
            )
        ) AS U

結果以下:blog

而UNPIVOT也將經過3個步驟完成get

1.獲取副本:table

這一步原表中的每一行將爲IN中對應的每一列複製一次原,由於IN中有三列,因此每一行都將被複制三次。而且最後的副本還會包含一個新列num_orders,對應IN中每一列的訂單數。最後的副本表以下class

2.第二步:im

隔離目標列值,將保留與num_orders對應的列值,並將其餘的列值去掉。最後的列值保留在num_orders中。查詢

3.第三步:

過濾掉結果列num_orders爲NULL的值,由於第二步的表中num_orders列沒有NULL值,因此第二步將是最後的結果。

相關文章
相關標籤/搜索