【问题标题】:TSQL - using IN with PIVOTTSQL - 将 IN 与 PIVOT 一起使用
【发布时间】:2013-01-22 22:27:49
【问题描述】:

困扰我的快速问题。

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

我找不到任何参考来确认这是否可行。

【问题讨论】:

  • 简短回答,不。您需要考虑生成动态 sql。
  • 那么,如果不可能,我怎么能做这样的事情呢?一般有什么建议吗?
  • 这是个好问题,尽管答案是否定的。

标签: sql tsql pivot


【解决方案1】:

不,这是不可能的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-12
    • 2014-03-20
    • 2020-04-27
    • 1970-01-01
    • 2015-04-06
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多