Maison > base de données > tutoriel mysql > Comment faire pivoter les données dans MySQL : transformer des colonnes en lignes ?

Comment faire pivoter les données dans MySQL : transformer des colonnes en lignes ?

Susan Sarandon
Libérer: 2025-01-09 15:12:39
original
492 Les gens l'ont consulté

How to Pivot Data in MySQL: Transforming Columns into Rows?

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 :

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
Copier après la connexion

Résultat :

Cette requête convertit les données au format suivant :

IDMONTHVALUEDESCRIP
101JanAcol1
101JanBcol2
101JanNULLcol3
101JanBcol4
102FebCcol1
102FebAcol2
102FebGcol3
102FebEcol4

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 :

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
Copier après la connexion

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal