J'ai trouvé cela dans le livre The Art of SQL , pages 284-286 :
Disons que le nom de votre table est foo
.
Tout d'abord, créez une table appelée pivot
:
CREATE Table pivot (
count int
);
Insérez dans ces tables autant de lignes qu'il y a de colonnes que vous souhaitez faire pivoter dans foo
. Puisque vous avez trois colonnes dans foo
que vous souhaitez faire pivoter, créez trois lignes dans le tableau croisé dynamique :
insert into pivot values (1);
insert into pivot values (2);
insert into pivot values (3);
Faites maintenant une jointure cartésienne entre foo
et pivot
, en utilisant un CASE
pour sélectionner la bonne colonne en fonction du nombre :
SELECT foo.id, Case pivot.count
When 1 Then cat
When 2 Then one_above
When 3 Then top_level
End Case
FROM foo JOIN pivot;
Cela devrait vous donner ce que vous voulez.