微立顶科技

新闻资讯

创新 服务 价值

  SQL 带条件查询的参数化动态PIVOT行转列

发布日期:2022/1/9 7:36:00      浏览量:

--6:带条件查询的参数化动态PIVOT行转列
-- =============================================
-- Create date: <2014.05.26>
-- Description:    <参数化动态PIVOT行转列,带条件查询的参数化动态PIVOT行转列>
-- =============================================
DECLARE @sql_str NVARCHAR(MAX)
DECLARE @sql_col NVARCHAR(MAX)
DECLARE @sql_where NVARCHAR(MAX)
DECLARE @tableName SYSNAME --行转列表
DECLARE @groupColumn SYSNAME --分组字段
DECLARE @row2column SYSNAME --行变列的字段
DECLARE @row2columnValue SYSNAME --行变列值的字段
SET @tableName = ’TestRows2Columns’
SET @groupColumn = ’UserName’
SET @row2column = ’Subject’
SET @row2columnValue = ’Source’
SET @sql_where = ’WHERE UserName = ’’王五’’’

--从行数据中获取可能存在的列
SET @sql_str = N’
SELECT @sql_col_out = ISNULL(@sql_col_out + ’’,’’,’’’’) + QUOTENAME([’+@row2column+’]) 
    FROM [’+@tableName+’] ’+@sql_where+’ 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’
SELECT * FROM (
    SELECT [’+@groupColumn+’],[’+@row2column+’],[’+@row2columnValue+’] FROM [’+@tableName+’]’+@sql_where+’) p PIVOT 
    (SUM([’+@row2columnValue+’]) FOR [’+@row2column+’] IN ( ’+ @sql_col +’) ) AS pvt 
ORDER BY pvt.[’+@groupColumn+’]’
--PRINT (@sql_str)
EXEC (@sql_str)


  业务实施流程

需求调研 →

团队组建和动员 →

数据初始化 →

调试完善 →

解决方案和选型 →

硬件网络部署 →

系统部署试运行 →

系统正式上线 →

合作协议

系统开发/整合

制作文档和员工培训

售后服务

马上咨询: 如果您有业务方面的问题或者需求,欢迎您咨询!我们带来的不仅仅是技术,还有行业经验积累。
QQ: 39764417/308460098     Phone: 13 9800 1 9844 / 135 6887 9550     联系人:石先生/雷先生