sql - TSQL - 将 IN 与 PIVOT 结合使用

标签 sql t-sql 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))

我找不到任何引用资料来确认这是否可行。

最佳答案

不,这是不可能的。

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/

相关文章:

sql - 如何检查重复值

sql-server - 如何从节点获取值(value)? SQL Server XML dml

r - 当列没有通用类型时如何延长数据集的旋转时间

sql - 通过存储过程从 SQL 导出二进制文件数据(图像)

sql - 选择递归并排序

sql - 计算字符串中实例的数量

SQL 获取接下来 n 行的最大值

SQL Server 2005 数据透视表问题

arrays - 快速排序枢轴

sql - 如何识别具有重复条目的列(使用 SQL)?