PIVOT 和 UNPIVOT 是 SQL Server 中最佳的實(shí)現(xiàn)行列轉(zhuǎn)換的方法,它們可以完成類似于 Excel 中的數(shù)據(jù)轉(zhuǎn)換思路。然而在 PIVOT 和 UNPIVOT 的使用上,一定需要會有的 SQL 知識,因?yàn)槭褂盟鼈冏餍辛修D(zhuǎn)換需要一定的語句語義基礎(chǔ)。
聯(lián)類型表在SQL Server中也可以實(shí)現(xiàn)行列轉(zhuǎn)換,但是這是一種非常基礎(chǔ)的實(shí)現(xiàn)方式,更多的時(shí)候是用來實(shí)現(xiàn)多表連接查詢,很少用來實(shí)現(xiàn)行列轉(zhuǎn)換,在實(shí)際應(yīng)用時(shí) PIVOT 和 UNPIVOT 才是以行列轉(zhuǎn)換的最佳方法。
下面我們以一個(gè)具體的例子來介紹 PIVOT 和 UNPIVOT 的用法,比如需要將下表中的行列轉(zhuǎn)換。
| December | January | February |
| ——– | ——- | ——– |
| 10 | 20 | 30 |
| 15 | 25 | 35 |
首先,需要使用 UNPIVOT 來實(shí)現(xiàn)行列轉(zhuǎn)換,語句如下:
“`SQL
SELECT month, value
FROM mytable
UNPIVOT (value FOR month IN ([December], [January], [February])) AS un
運(yùn)行結(jié)果如下:
| month | value || ------ | ------- |
| December | 10 || December | 15 |
| January | 20 || January | 25 |
| February | 30 || February | 35 |
接下來再使用 PIVOT 將其再次轉(zhuǎn)換,可以實(shí)現(xiàn)行列轉(zhuǎn)換,語句如下:```SQL
SELECT [December], [January], [February]FROM mytable
PIVOT (SUM (value) FOR month IN ([December], [January], [February])) AS p
運(yùn)行結(jié)果如下
| December | January | February |
| ——– | ——- | ——– |
| 10 | 20 | 30 |
| 15 | 25 | 35 |
以上就是 PIVOT 和 UNPIVOT 來實(shí)現(xiàn)行列轉(zhuǎn)換的最佳方法,它們封裝了行列轉(zhuǎn)換的復(fù)雜操作,可以最大限度的提高SQL性能,而且與 Excel 的語法思維也易于理解,是一種極其實(shí)用的方法。