Maison >base de données >tutoriel mysql >Comment annuler le pivotement et faire pivoter des données dans MySQL pour transformer des colonnes en lignes ?

Comment annuler le pivotement et faire pivoter des données dans MySQL pour transformer des colonnes en lignes ?

DDD
DDDoriginal
2025-01-09 15:07:411031parcourir

How to Unpivot and Pivot Data in MySQL to Transform Columns into Rows?

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 :

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;

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é :

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;

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!

Déclaration:
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