Maison >base de données >tutoriel mysql >Comment pivoter une table dans MySQL: transformer les lignes en colonnes?
Question :
Convertissez un tableau à trois colonnes en tableau croisé dynamique, où les lignes deviennent des colonnes.
Exemple :
Formulaire de saisie :
hostid | itemname | itemvalue |
---|---|---|
1 | A | 10 |
1 | B | 3 |
2 | A | 9 |
2 | C | 40 |
Sortie requise (tableau croisé dynamique) :
hostid | A | B | C |
---|---|---|---|
1 | 10 | 3 | 0 |
2 | 9 | 0 | 40 |
Solution :
La fonctionnalité pivot de MySQL implique un processus en trois étapes :
<code class="language-sql">SELECT hostid, itemname, itemvalue FROM history;</code>
Ajoutez une colonne correspondant à chaque nom d'élément unique.
<code class="language-sql">CREATE VIEW history_extended AS ( SELECT history.*, CASE WHEN itemname = "A" THEN itemvalue END AS A, CASE WHEN itemname = "B" THEN itemvalue END AS B, CASE WHEN itemname = "C" THEN itemvalue END AS C FROM history );</code>
Regroupez par hostid et additionnez les valeurs dans chaque colonne.
<code class="language-sql">CREATE VIEW history_itemvalue_pivot AS ( SELECT hostid, SUM(A) AS A, SUM(B) AS B, SUM(C) AS C FROM history_extended GROUP BY hostid );</code>
<code class="language-sql">CREATE VIEW history_itemvalue_pivot_pretty AS ( SELECT hostid, COALESCE(A, 0) AS A, COALESCE(B, 0) AS B, COALESCE(C, 0) AS C FROM history_itemvalue_pivot );</code>
Remarques et restrictions :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!