透视多个聚合列

时间:2017-10-25 21:55:03

标签: sql sql-server sql-server-2016

我无法解决以下问题。我的表结构:

ID Type Price Currency
1   A    100    USD
1   B    200    EUR
1   C    300    CAD
2   A    400    EUR
2   B    500    EUR
2   C    600    USD

我需要得到以下结果:

ID   A  A_Currency B    B_Currency  C C_Currency  
 1  100    USD     200    EUR      300    CAD
 2  400    EUR     500    EUR      600    USD  

此时我能够成功制作没有这样的货币的表格:

select ID, p.A, p.B, p.C from 
(select ID, Price, Type from MyTable) as x
pivot(Max(Price) for Type in 
(A, B, C)) as p

它很棒。但现在我真的迷失了如何为每种类型添加货币。我试着把它放在选择中,但它不起作用,PIVOT不接受多列。

1 个答案:

答案 0 :(得分:3)

示例

Select *
 From (
        Select ID
              ,B.*
         From  YourTable A
         Cross Apply ( values ( concat(A.Type,'_Currency'),A.Currency)
                             ,( A.Type,cast(A.Price as varchar(50)))
                     ) B(Item,Value)
      ) A
 Pivot (max(Value) for Item in ([A],[A_Currency],[B],[B_Currency],[C],[C_Currency]) ) p

<强>返回

ID  A     A_Currency    B     B_Currency    C     C_Currency
1   100   USD           200   EUR           300   CAD
2   400   EUR           500   EUR           600   USD