Pivoter sur plusieurs colonnes agrégées

Je ne peux pas envelopper ma tête autour du problème suivant. Ma structure de 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 

Je dois get le résultat suivant:

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

À ce stade, j'ai été en mesure de produire avec succès une table sans devises comme ceci:

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

Et ça fonctionne très bien. Mais maintenant, je suis vraiment perdu sur la façon d'append de la monnaie pour chaque type. J'ai essayé de le mettre en sélection mais cela ne fonctionne pas et PIVOT n'accepte pas les colonnes multiples.

Exemple

 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 

Résultats

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