Pivot et pivot de données MySQL : convertir les colonnes en lignes
Supposons que vous ayez un tableau avec plusieurs colonnes (col1, col2, col3, etc.) et que vous souhaitiez le convertir au format de tableau croisé dynamique, présentant les données en unités de ligne plutôt qu'en colonnes.
Pour y parvenir dans MySQL, utilisez d'abord la requête UNION ALL
pour faire pivoter les données. Ce processus crée plusieurs lignes à partir des valeurs de colonne d'origine :
<code class="language-sql">SELECT id, month, col1 AS value, 'col1' AS descrip FROM yourtable UNION ALL SELECT id, month, col2 AS value, 'col2' AS descrip FROM yourtable UNION ALL SELECT id, month, col3 AS value, 'col3' AS descrip FROM yourtable UNION ALL SELECT id, month, col4 AS value, 'col4' AS descrip FROM yourtable;</code>
UNION ALL
Résultats de la requête :
ID | MONTH | VALUE | DESCRIP |
---|---|---|---|
101 | Jan | A | col1 |
102 | feb | C | col1 |
101 | Jan | B | col2 |
102 | feb | A | col2 |
101 | Jan | (null) | col3 |
102 | feb | G | col3 |
101 | Jan | B | col4 |
102 | feb | E | col4 |
Ensuite, enveloppez la requête UNION ALL
dans une sous-requête pour faire pivoter les données. Utilisez les fonctions d'agrégation GROUP BY
et les instructions CASE
pour convertir la structure de la perspective non pivotée dans le format de perspective souhaité :
<code class="language-sql">SELECT descrip, MAX(CASE WHEN month = 'jan' THEN value ELSE 0 END) AS jan, MAX(CASE WHEN month = 'feb' THEN value ELSE 0 END) AS feb FROM ( SELECT id, month, col1 AS value, 'col1' AS descrip FROM yourtable UNION ALL SELECT id, month, col2 AS value, 'col2' AS descrip FROM yourtable UNION ALL SELECT id, month, col3 AS value, 'col3' AS descrip FROM yourtable UNION ALL SELECT id, month, col4 AS value, 'col4' AS descrip FROM yourtable ) AS src GROUP BY descrip;</code>
Résultats de la requête pivot :
DESCRIP | JAN | FEB |
---|---|---|
col1 | A | C |
col2 | B | A |
col3 | 0 | G |
col4 | B | E |
Ce processus convertit efficacement la structure du tableau de colonnes en lignes, vous permettant de présenter vos données de manière plus concise et claire.
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!