Créer des colonnes à partir de lignes

J'ai cette table

ID colname F1 F2 F3 F4 1 P1 1 2 3 4 1 P2 5 6 7 8 1 P3 9 10 11 12 1 P4 13 14 15 16 2 P1 17 18 19 20 2 P2 21 22 23 24 2 P3 25 26 27 28 2 P4 29 30 31 32 

J'essaie de produire ce résultat La valeur de Pn correspond à Fn

  ID P1 P2 P3 P4 1 1 6 11 16 2 17 22 27 32 

Pouvez-vous s'il vous plaît me donner quelques conseils et mots-keys sur la façon dont cela pourrait être fait avec SQL Server?

J'ai joué avec Pivot mais est-ce le path à parcourir?

Eh bien, vous pouvez faire quelque chose comme ça:

 select id, max(case when colname = 'P1' then F1 end) as P1, max(case when colname = 'P2' then F2 end) as P2, max(case when colname = 'P3' then F3 end) as P3, max(case when colname = 'P4' then F4 end) as P4 from Table1 group by id 

sql fiddle démo

Si vous voulez une solution qui utilise PIVOT :

 SELECT * FROM ( SELECT ID,colname,value FROM MyTable UNPIVOT (value FOR col in ([F1],[F2],[F3],[F4])) a WHERE REPLACE(col,'F','P') = colname ) b PIVOT (MAX(value) FOR colname in ([P1],[P2],[P3],[P4])) c 

La méthode PIVOT suivie par UNPIVOT est extrêmement polyvalente pour les transformations, mais il est généralement plus facile et plus lisible de le faire manuellement, comme dans l'exemple de Roman.