/****** Object: StoredProcedure [dbo].[CallWorkOrder] Script Date: 11/14/2016 11:46:41 ******/ SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO /* 行转列 exec [P_RowToColumn] '','Online' */ ALTER PROCEDURE [dbo].[P_RowToColumn] @sql VARCHAR(3000), @yjcolumn VARCHAR(50), -- 分组字段 @tjfield VARCHAR(50), -- 统计字段 @tjType VARCHAR(50)='MAX', -- 统计类型,默认为Sum,支持MAX、MIN等 @order VARCHAR(100)='' AS DECLARE @str_column NVARCHAR(500),@sql_fields NVARCHAR(3000) SET @sql_fields = 'WITH MyField AS('+@sql+') SELECT @str_column=ISNULL(@str_column+'','','''')+ QUOTENAME('+@yjcolumn+') FROM MyField GROUP BY '+@yjcolumn --PRINT @sql_fields EXEC SP_EXECUTESQL @sql_fields,N'@str_column VARCHAR(500) OUTPUT',@str_column OUTPUT --print @str_column IF ISNULL(@str_column,'') <> '' BEGIN SET @sql_fields=';WITH MyTab AS( '+@sql+' ) SELECT * FROM MyTab PIVOT('+@tjType+'('+@tjfield+') FOR '+@yjcolumn+' IN('+@str_column+') ) AS T' --print @sql_fields EXEC(@sql_fields) END ELSE EXEC (@sql)