2012-06-27 2 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 ya 당신의 대답은 훌륭하고 잘 작동합니다 ... 고마워 ... –

답변

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)';