我无法解决以下问题。我的表结构:
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不接受多列。
答案 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