SQL Server 动态行转列实现

浏览: 2484

背景需求

由于数据表的行数据,会随着系统不断增加,为了减少开发成本,特实现动态行转列脚本实现。

代码实现

DECLARE @sql_str NVARCHAR(MAX)
DECLARE @sql_col NVARCHAR(MAX)
DECLARE @tableName SYSNAME --行转列表

DECLARE @groupColumn SYSNAME --分组字段
DECLARE @row2column SYSNAME --行变列的字段
DECLARE @row2columnValue SYSNAME --行变列值的字段
SET @tableName = 'Det_SpecialFee' --表名称
SET @groupColumn = 'ThisCN'+','+'StationCode'+','+'CustomerType' --分组
SET @row2column = 'UnoinName'
SET @row2columnValue = 'TotalM'


--从行数据中获取可能存在的列

SET @sql_str = N'
SELECT @sql_col_out = ISNULL(@sql_col_out + '','','''') + QUOTENAME(['+@row2column+'])
FROM ['+@tableName+'] GROUP BY ['+@row2column+']'
--PRINT @sql_str

EXEC sp_executesql @sql_str,N'@sql_col_out NVARCHAR(MAX) OUTPUT',@sql_col_out=@sql_col OUTPUT
--PRINT @sql_col


SET @sql_str = N'
Drop Table Det_SpecialFee_Bak ;
SELECT * Into Det_SpecialFee_Bak FROM (
SELECT '+@groupColumn+',['+@row2column+'],['+@row2columnValue+'] FROM ['+@tableName+']) p PIVOT
(SUM(['+@row2columnValue+']) FOR ['+@row2column+'] IN ( '+ @sql_col +') ) AS pvt
ORDER BY '+@groupColumn+'';

--PRINT (@sql_str)
EXEC (@sql_str)

实现内容

image.png

参考文章:SQL Server 动态行转列(参数化表名、分组列、行转列字段、字段值)

推荐 1
本文由 我是最优雅的杀手,不杀人专杀狗 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

0 个评论

要回复文章请先登录注册