51 lines
1.0 KiB
Transact-SQL
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)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|