我们有时候在处理数据显示的时候,需要把之前的数据进行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+')') 结果对比之前的数据:

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

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

被折叠的 条评论
为什么被折叠?



