Mysql Convertir la colonne en ligne (tableau croisé dynamique)
J'ai un tableau comme celui-ci
+---+-----+----+----+----+----+
|id |month|col1|col2|col3|col4|
+---+-----+----+----+----+----+
|101|Jan |A |B |NULL|B |
+---+-----+----+----+----+----+
|102|feb |C |A |G |E |
+---+-----+----+----+----+----+
Et puis je veux créer un rapport comme ça
+----+---+---+
|desc|jan|feb|
+----+---+---+
|col1|A |C |
+----+---+---+
|col2|B |A |
+----+---+---+
|col3|0 |G |
+----+---+---+
|Col4|B |E |
+----+---+---+
Quelqu'un peut-il aider?
source d'informationauteur user1914516
Vous devez vous connecter pour publier un commentaire.
Ce que vous devez faire est d'abord, unpivot les données, puis faites-le pivoter. Mais, malheureusement, MySQL n'a pas de ces fonctions de sorte que vous aurez besoin de les reproduire à l'aide d'un
UNION ALL
requête pour le unpivot et une fonction d'agrégation avec unCASE
pour le pivot.La unpivot ou
UNION ALL
pièce prend les données de votre col1, col2, ... et il se transforme en plusieurs lignes:Voir SQL jouer avec la Démo.
Résultat:
Vous enveloppez-vous de cette dans une sous-requête pour appliquer les agréger et les
CASE
afin de le convertir dans le format que vous voulez:Voir SQL jouer avec la démo
Le résultat est: