【问题标题】:T-SQL Multiple Pivot Column IssueT-SQL 多数据透视列问题
【发布时间】:2016-01-22 17:14:01
【问题描述】:

我有一个 SQL Server 表和一个查询,它会生成一个带有两个数据透视列的数据透视表。以前它只适用于一个数据透视列 (pvt1)。

SELECT
    MIN([Created Date]),
    MIN([2]) AS [2],
    MIN([4]) AS [4],
    MIN([12]) AS [12],
    MIN([18]) AS [18],
    MIN([47]) AS [47],
    MIN([88]) AS [88],
    MIN([982]) AS [982],
    MIN([1033]) AS [1033],
    MIN([2360]) AS [2360],
    MIN([3759]) AS [3759],
    MIN([3974]) AS [3974],
    MIN([5586]) AS [5586]
FROM 
    (SELECT
         year(udp.CreatedDate) AS "Created Date",
         MAX(udp.Participant) AS "Participant",
         MAX(udp.LastModifiedDate) AS "Last Modified Date",
         MAX(udp.Client) AS "Client"
     FROM
         UDP_Table AS udp
     WHERE
         1=1
     GROUP BY
         year(udp.CreatedDate)) AS source
PIVOT (
    MAX([Last Modified Date])
FOR
  [Participant] IN ([2], [4], [12], [18], [47], [88])
)
as pvt1
PIVOT (
    MAX([Last Modified Date])
FOR
   [Client] IN ([982], [1033], [2360], [3759], [3974], [5586])
)
as pvt2

GROUP BY
    [Created Date]
ORDER BY
    [Created Date] asc

结果是:

[S0001][207] 列名“上次修改日期”无效。

奇怪的是,当我尝试这个与我的结构相同的示例表和查询(见下面的链接)时,它可以工作。

http://pratchev.blogspot.de/2009/01/pivoting-on-multiple-columns.html

我的查询有什么问题?

【问题讨论】:

    标签: sql-server pivot multiple-columns


    【解决方案1】:

    您的第一个枢轴将[Last Modified Date] 列转换为名为@9​​87654322@ 的列,因此第二个枢轴不存在[Last Modified Date]。您发布的示例为每个枢轴 SUM(value) AS valueSUM(quantity) AS quantity 使用了 2 个不同的列

    我不能 100% 确定您要完成什么,但根据您的最终选择,您需要为每个参与者和每个客户提供一个列。您可能应该做一个 UNION 将记录连接在一起,然后只做 1 个 Pivot。

    看起来像这样。

    SELECT *
    FROM 
        (SELECT
             year(udp.CreatedDate) AS "Created Date",
             MAX(udp.Participant) AS "Participant",
             MAX(udp.LastModifiedDate) AS "Last Modified Date",
         FROM
             UDP_Table AS udp
         GROUP BY
             year(udp.CreatedDate)
         UNION ALL
         SELECT
             year(udp.CreatedDate) AS "Created Date",
             MAX(udp.Client) AS "Participant",
             MAX(udp.LastModifiedDate) AS "Last Modified Date",
         FROM
             UDP_Table AS udp
         GROUP BY
             year(udp.CreatedDate)
    ) AS source
    PIVOT (
        MAX([Last Modified Date])
        FOR [Participant] IN ([2], [4], [12], [18], [47], [88], [982], [1033], [2360], [3759], [3974], [5586])
    )
    as pvt1
    

    【讨论】:

    • 那么,你说如果我使用一列作为主元,我不能再次使用同一列作为第二个主元?
    猜你喜欢
    • 2015-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-25
    • 2011-11-06
    • 2014-08-07
    相关资源
    最近更新 更多