PIVOT 和 UNPIVOT实例使用

       PIVOT 通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。UNPIVOT 与 PIVOT 执行相反的操作,将表值表达式的列转换为列值。

 

1、PIVOT 使用实例

先建立一个临时表做为例表:

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

表的内容:

使用PIVOT 语句:

 

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、UNPIVOT实例

建立一个临时表结构:

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

表内容:

UNPIVOT语句:

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

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值