Table initiale


On a au départ , des données stockées dans une table, selon le modèle code/valeur, les deux colonnes représentant une clé primaire.

-------------
|TABLE_BASE |
-------------
|Code k |
|value k |
-------------

Table Finale


On souhaite obtenir l'ensemble des valeurs associées à un code, sur une seule ligne. Dans cet exemple, on sait qu'il n'existe au maximum, que 9 valeurs associées à un même code.

-------------
|TABLE_PIVO |
-------------
|Code k |
|value1 |
|value2 |
|value3 |
|value4 |
|value5 |
|value6 |
|value7 |
|value8 |
|value9 |
-------------


Commande SQL


Ici, on utilise un Rank pour générer la données sur laquelle sera faite le Pivot.

/* Code SQL pour gérérer les données Pivotées */
WITH Options
AS
(
SELECT code, value, rank() over(PARTITION BY code order by value) as POS
FROM TABLE_BASE
)
SELECT * FROM Options PIVOT (MAX(value) FOR POS IN ([1],[2],[3],[4],[5],[6],[7],[8],[9])
) AS pvt