这个问题困扰着我。
在 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))
我找不到任何引用资料来确认这是否可行。
最佳答案
不,这是不可能的。
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);
关于sql - TSQL - 将 IN 与 PIVOT 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14460315/