要擁有PIVOT動態,您必須編寫存儲過程。
CREATE PROCEDURE dynPivot
(
@select varchar(255),
@pivotColumns varchar(255),
@summaries varchar(100)
) AS
DECLARE @pivot varchar(max), @sql varchar(max), @selectForPivotColumns varchar(max)
SELECT @selectForPivotColumns = REPLACE(@select, 'SELECT', 'SELECT ' + @pivotColumns + ' AS rowValuesToColumns, ')
CREATE TABLE #pivot_columns (pivot_column varchar(100))
SELECT @sql = 'SELECT DISTINCT rowValuesToColumns FROM (' + @selectForPivotColumns + ') as t'
INSERT INTO #pivot_columns
EXEC(@sql)
SELECT @pivot = COALESCE(@pivot + ', ', '') + '[' + pivot_column + ']' FROM #pivot_columns
SELECT @sql =
'
SELECT * FROM
(
' + @select + '
) AS t
PIVOT
(
' + @summaries + ' FOR ' + @pivotColumns + ' IN (' + @pivot + ')
) AS p
'
EXEC(@sql)
然後,你可以這樣調用:
EXEC dynPivot 'SELECT * FROM tbl_DeductionHead', 'DeductionHead', 'SUM(DeductionPerAmount)';
你不能。值列表是靜態的 – teran
@Gaurav任何反饋?我的回答有幫助嗎? – fancyPants
@tombom你確定你的答案是偉大的,它工作正常...感謝傢伙... –