2013-01-22 125 views
2

快速的問題,這讓我煩惱。TSQL - 使用IN與PIVOT

在T-SQL中使用PIVOT時,'FOR..IN'部分可以引用表而不是定義的值列表嗎?

例如,而不是像: -

PIVOT (Count(widgets) For Team IN ([Dave],[Peter],[John]....etc)) 

,你可以這樣做: -

PIVOT (Count(widgets) for Team IN (SELECT TeamLeader FROM Teams)) 

我找不到任何引用證實了這一點是否是可能的。

+1

簡短的回答,沒有。你需要考慮生成動態SQL。 – Dave

+0

所以,如果不可能的話,我該如何去做這樣的事情呢?一般的指針? –

+0

這是一個很好的問題,即使答案是否定的。 –

回答

2

不,這是不可能的。

PIVOT運算符的語法決定了這些數值輸入爲列表:

... 

IN ([first pivoted column], 

    [second pivoted column], 

... 
... 

    [last pivoted column]) 

但你可以做到這一點動態的,是這樣的:

DECLARE @cols AS NVARCHAR(MAX); 
DECLARE @query AS NVARCHAR(MAX); 


select @cols = STUFF((SELECT distinct ',' + 
         QUOTENAME(Teamleader) 
         FROM Teams 
         FOR XML PATH(''), TYPE 
        ).value('.', 'NVARCHAR(MAX)') 
         , 1, 1, ''); 


SELECT @query = ' SELECT ' + @cols + 
       ' FROM AnotherTable a 
        PIVOT 
        (
        Count(widgets) For Team IN (' + @cols + ')' + 
        ') p'; 
execute(@query);