2016-01-22 81 views
0

我有一个SQL Server表和一个查询会导致一个数据透视表与两个透视列。以前它只与一个枢轴列(pvt1)一起工作。T-SQL Multiple Pivot Column问题

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

这有什么错我的查询?

回答

0

您的第一个数据透视表将列[Last Modified Date]转换为名为[2], [4], [12], [18], [47], [88]的列,因此[Last Modified Date]对于第二个数据透视表不存在。比如你贴使用2分不同的列各关键SUM(value) AS valueSUM(quantity) AS quantity

我不是100%肯定你想完成什么,但基于您的最终选择,你希望每个参与者和每个客户端的列。你可能应该做一个联合一起加入记录,然后做1个枢轴。

这看起来像这样。

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 
+0

所以,你说如果我使用了一个主轴的列我不能再次使用同一列为第二个枢轴? – Tibor

+0

@Tibor,这是正确的 – JamieD77