PIVOT 和 UNPIVOT實例使用

       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 );

表的內容: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 ]

運行結果: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 );

表內容: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;

運行結果:

 

 

 

轉載於:https://www.cnblogs.com/a-fei/archive/2011/04/13/2014559.html