Mysql
 sql >> Base de données >  >> RDS >> Mysql

Transposer une ligne en colonnes avec MySQL sans utiliser UNIONS ?

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.