2012-06-27 63 views
0

下面的查詢執行好...動態透視查詢

select LIC,PF from (select * from tbl_DeductionHead)up 
pivot(sum(DeductionPerAmount) for DeductionHead In (LIC,PF)) as pvt 

和輸出的樣子,

LIC PF 
900.00 NULL 
NULL 600.00 

但我的疑問是我怎樣才能獲得列的動態字段值..

就是

select * from (select * from tbl_DeductionHead)up 
pivot(sum(DeductionPerAmount) for DeductionHead In (*)) as pvt 

如何使用上述查詢

+0

你不能。值列表是靜態的 – teran

+0

@Gaurav任何反饋?我的回答有幫助嗎? – fancyPants

+0

@tombom你確定你的答案是偉大的,它工作正常...感謝傢伙... –

回答

2

要擁有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)';