2

私を悩ませている簡単な質問。

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

これが可能かどうかを確認するための参照が見つかりません。

4

1 に答える 1

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);
于 2013-01-22T14:05:46.307 に答える