透视多个聚合列
Pivot on multiple aggregated columns
我无法解决以下问题。我的 table 结构:
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
在这一点上,我能够在没有像这样的货币的情况下成功地生产 table:
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
而且效果很好。但现在我真的不知道如何为每种类型添加货币。我试着把它放在 select 中,但它不起作用,而且 PIVOT 不接受多列。
例子
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
Returns
ID A A_Currency B B_Currency C C_Currency
1 100 USD 200 EUR 300 CAD
2 400 EUR 500 EUR 600 USD
我无法解决以下问题。我的 table 结构:
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
在这一点上,我能够在没有像这样的货币的情况下成功地生产 table:
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
而且效果很好。但现在我真的不知道如何为每种类型添加货币。我试着把它放在 select 中,但它不起作用,而且 PIVOT 不接受多列。
例子
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
Returns
ID A A_Currency B B_Currency C C_Currency
1 100 USD 200 EUR 300 CAD
2 400 EUR 500 EUR 600 USD