PIVOT 經過將表達式某一列中的惟一值轉換爲輸出中的多個列來旋轉表值表達式,並在必要時對最終輸出中所需的任何其他列值執行聚合。UNPIVOT 與 PIVOT 執行相反的操做,將表值表達式的列轉換爲列值。html
一、PIVOT 使用實例post
先創建一個臨時表作爲例表:spa
1
create
table
#PIVOT (id
int
,name
varchar
(
50
),
[
subject
]
varchar
(
50
),val
decimal
(
18
,
2
))
2
3 INSERT INTO #PIVOT VALUES ( 1 , ' 張三 ' , ' 語文 ' , 54.12 );
4 INSERT INTO #PIVOT VALUES ( 2 , ' 張三 ' , ' 數學 ' , 25.3 );
5 INSERT INTO #PIVOT VALUES ( 3 , ' 張三 ' , ' 外語 ' , 69 );
6 INSERT INTO #PIVOT VALUES ( 4 , ' 張三 ' , ' 物理 ' , 15.23 );
7 INSERT INTO #PIVOT VALUES ( 5 , ' 張三 ' , ' 化學 ' , 15.02 );
8
9 INSERT INTO #PIVOT VALUES ( 6 , ' 李四 ' , ' 語文 ' , 54.12 );
10 INSERT INTO #PIVOT VALUES ( 7 , ' 李四 ' , ' 數學 ' , 25.3 );
11 INSERT INTO #PIVOT VALUES ( 8 , ' 李四 ' , ' 外語 ' , 69 );
12 INSERT INTO #PIVOT VALUES ( 9 , ' 李四 ' , ' 物理 ' , 15.23 );
13 INSERT INTO #PIVOT VALUES ( 10 , ' 李四 ' , ' 化學 ' , 15.02 );
2
3 INSERT INTO #PIVOT VALUES ( 1 , ' 張三 ' , ' 語文 ' , 54.12 );
4 INSERT INTO #PIVOT VALUES ( 2 , ' 張三 ' , ' 數學 ' , 25.3 );
5 INSERT INTO #PIVOT VALUES ( 3 , ' 張三 ' , ' 外語 ' , 69 );
6 INSERT INTO #PIVOT VALUES ( 4 , ' 張三 ' , ' 物理 ' , 15.23 );
7 INSERT INTO #PIVOT VALUES ( 5 , ' 張三 ' , ' 化學 ' , 15.02 );
8
9 INSERT INTO #PIVOT VALUES ( 6 , ' 李四 ' , ' 語文 ' , 54.12 );
10 INSERT INTO #PIVOT VALUES ( 7 , ' 李四 ' , ' 數學 ' , 25.3 );
11 INSERT INTO #PIVOT VALUES ( 8 , ' 李四 ' , ' 外語 ' , 69 );
12 INSERT INTO #PIVOT VALUES ( 9 , ' 李四 ' , ' 物理 ' , 15.23 );
13 INSERT INTO #PIVOT VALUES ( 10 , ' 李四 ' , ' 化學 ' , 15.02 );
表的內容:code
使用PIVOT 語句:htm
1
select
[
subject
]
,
[
張三
]
,
[
李四
]
from
(
2 select [ subject ] ,name,val from #PIVOT
3 ) as p1
4 pivot ( max (val) for name in ( [ 張三 ] , [ 李四 ] )) as p2
5 order by p2. [ subject ]
2 select [ subject ] ,name,val from #PIVOT
3 ) as p1
4 pivot ( max (val) for name in ( [ 張三 ] , [ 李四 ] )) as p2
5 order by p2. [ subject ]
運行結果:blog
二、UNPIVOT實例ci
創建一個臨時表結構:數學
1
CREATE
TABLE
#pvt (VendorID
int
, Emp1
int
, Emp2
int
,
2 Emp3 int , Emp4 int , Emp5 int );
3
4 INSERT INTO #pvt VALUES ( 1 , 4 , 3 , 5 , 4 , 4 );
5 INSERT INTO #pvt VALUES ( 2 , 4 , 1 , 5 , 5 , 5 );
6 INSERT INTO #pvt VALUES ( 3 , 4 , 3 , 5 , 4 , 4 );
7 INSERT INTO #pvt VALUES ( 4 , 4 , 2 , 5 , 5 , 4 );
8 INSERT INTO #pvt VALUES ( 5 , 5 , 1 , 5 , 5 , 5 );
2 Emp3 int , Emp4 int , Emp5 int );
3
4 INSERT INTO #pvt VALUES ( 1 , 4 , 3 , 5 , 4 , 4 );
5 INSERT INTO #pvt VALUES ( 2 , 4 , 1 , 5 , 5 , 5 );
6 INSERT INTO #pvt VALUES ( 3 , 4 , 3 , 5 , 4 , 4 );
7 INSERT INTO #pvt VALUES ( 4 , 4 , 2 , 5 , 5 , 4 );
8 INSERT INTO #pvt VALUES ( 5 , 5 , 1 , 5 , 5 , 5 );
表內容:table
UNPIVOT語句:class
1
SELECT
VendorID, Employee, Orders
2 FROM
3 ( SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
4 FROM #pvt) p
5 UNPIVOT
6 (Orders FOR Employee IN
7 (Emp1, Emp2, Emp3, Emp4, Emp5)
8 ) AS ss;
2 FROM
3 ( SELECT VendorID, Emp1, Emp2, Emp3, Emp4, Emp5
4 FROM #pvt) p
5 UNPIVOT
6 (Orders FOR Employee IN
7 (Emp1, Emp2, Emp3, Emp4, Emp5)
8 ) AS ss;
運行結果: