TSQL - 使用IN和PIVOT

时间:2013-01-22 14:00:31

标签: sql tsql 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 个答案:

答案 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);