SQL SERVER 90度行列互换

本文介绍了一种在SQL中实现数据行列互转的方法,通过动态SQL实现数据的灵活转换,适用于需要将表格数据从行展示转为列展示的场景。

      我们有时候在处理数据显示的时候,需要把之前的数据进行90度的行列互转(注:不是行转列),数据处理起来比较麻烦,提供一个方法,测试数据:

--测试数据
if not object_id('tab') is null  
    drop table tab  
Go  
Create table tab(a0 NVARCHAR(100),a1 int,a2 int,a3 int)  
Insert tab  
select '2017/1/18',1,11,111  UNION all 
select '2017/1/19',2,22,222  union all 
select '2017/1/20',3,33,333  
go 
--测试数据结束

        我们用下边的代码进行转换:

DECLARE @s NVARCHAR(4000) ,
    @s2 NVARCHAR(4000) ,
    @s3 NVARCHAR(4000) ,
    @s4 NVARCHAR(4000)  
SELECT  @s = ISNULL(@s + ',', 'declare ') + '@' + RTRIM(Colid)
        + ' nvarchar(4000)' ,
        @s2 = ISNULL(@s2 + ',', 'select ') + '@' + RTRIM(Colid) + '='''
        + CASE WHEN @s2 IS NOT NULL THEN 'union all select'
               ELSE ' select '
          END + '  a0=''' + QUOTENAME(Name, '''') + '''''' ,
        @s3 = ISNULL(@s3, '') + 'select @' + RTRIM(Colid) + '=@' + RTRIM(Colid)
        + '+'',''+quotename([a0])+''=''+quotename(' + QUOTENAME(Name)
        + ','''''''')  from tab ' ,
        @s4 = ISNULL(@s4 + '+', '') + '@' + RTRIM(Colid)
FROM    syscolumns
WHERE   id = OBJECT_ID('tab')
        AND Name NOT IN ( 'a0' )  
EXEC(@s+' '+@s2+' '+@s3+' exec('+@s4+')')  

      结果对比之前的数据:


       以上达到了我们进行行列互转的需求

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值