Maison >base de données >tutoriel mysql >Comment faire pivoter les données dans MySQL : transformer des colonnes en lignes ?
MySQL Pivot : convertir les colonnes en lignes
Dans MySQL, un tableau croisé dynamique doit être généré en convertissant les colonnes en lignes pour une meilleure présentation des données. Par exemple, considérons un tableau contenant plusieurs colonnes (par exemple, col1, col2) représentant les données de différents mois (par exemple, janvier, février).
Exigences : Créez un rapport qui présente les données dans un format de tableau croisé dynamique, où chaque ligne représente une colonne du tableau d'origine et chaque colonne représente un mois différent.
Extension des données :
MySQL ne dispose pas de fonctions intégrées pour déplier les données (conversion de colonnes en lignes). Cependant, cela peut être réalisé avec une requête UNION ALL :
<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>
Résultat :
Cette requête convertit les données au format suivant :
ID | MONTH | VALUE | DESCRIP |
---|---|---|---|
101 | Jan | A | col1 |
101 | Jan | B | col2 |
101 | Jan | NULL | col3 |
101 | Jan | B | col4 |
102 | Feb | C | col1 |
102 | Feb | A | col2 |
102 | Feb | G | col3 |
102 | Feb | E | col4 |
Pivot :
Une fois les données développées, elles peuvent être converties au format de tableau croisé dynamique souhaité à l'aide de fonctions d'agrégation. La requête suivante utilise une instruction CASE pour regrouper les données par chaque colonne (descrip) et afficher les valeurs de janvier et février :
<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 ) src GROUP BY descrip</code>
Résultat :
Cette requête génère le format de tableau croisé dynamique requis :
DESCRIP | JAN | FEB |
---|---|---|
col1 | A | C |
col2 | B | A |
col3 | 0 | G |
col4 | B | E |
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!