Files
lserp_cs_5.0/新增SQL/2016-11-13行转列.sql
T
2026-07-10 15:25:05 +08:00

51 lines
1.0 KiB
Transact-SQL

/****** 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)