SQL SERVER 行列转换(2)——PIVOT、UNPIVOT 转换

       上篇博客介绍了静态方式的行列转换,这次介绍一下利用SQL SERVER 函数实现的行列转换,行转列测试数据同之前的一样:

--测试数据  
if not object_id(N'Tempdb..#T') is null  
    drop table #T  
Go  
Create table #T([Name] nvarchar(22),[Subject] nvarchar(22),[Score] int)  
Insert #T  
select N'李四',N'语文',60 union all  
select N'李四',N'数学',70 union all  
select N'李四',N'英语',80 union all  
select N'张三',N'语文',90 union all  
select N'张三',N'数学',80 union all  
select N'张三',N'英语',70  
Go  
--测试数据结束  

        利用PIVOT方法实现行转列的形式:

SELECT  *
FROM    #T PIVOT 
( MAX(Score) FOR Subject IN ( [语文], [数学], [英语] ) ) AS T

        结果如下:


        列转行测试数据:

--测试数据  
if not object_id(N'Tempdb..#T') is null  
    drop table #T  
Go  
Create table #T([姓名] nvarchar(22),[语文] int,[数学] int,[英语] int)  
Insert #T  
select N'李四',60,70,80 union all  
select N'张三',90,80,70  
Go  
--测试数据结束  

      利用UNPIVOT的方式实现列转行:

SELECT  *
FROM    #T UNPIVOT 
( Score FOR Subject IN ( 语文, 数学, 英语 ) ) P

        结果如下:


      以上我们利用PIVOT、UNPIVOT实现了行列转换。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值