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

Comment annuler le pivotement des colonnes en lignes dans MySQL ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-20 05:41:081006parcourir

How to Unpivot Columns into Rows in MySQL?

Astuces pour convertir des colonnes en lignes dans MySQL

Lorsque vous travaillez avec des données organisées en colonnes dans MySQL, vous devrez peut-être les convertir dans un format qui présente les données en lignes. Ce processus est appelé sans pivotement.

Question :

Considérez la forme suivante :

<code>ID | a  | b  | c 
1  | a1 | b1 | c1
2  | a2 | b2 | c2</code>

Le but est de convertir des colonnes en lignes pour obtenir un tableau avec la structure suivante :

<code>ID | 值 | 列名
1  | a1 | a
1  | b1 | b
1  | c1 | c
2  | a2 | a
2  | b2 | b
2  | c2 | c</code>

Solution :

Contrairement à d'autres bases de données, MySQL n'a pas de fonction de déroulement intégrée. Pour obtenir les résultats souhaités, vous pouvez utiliser la requête UNION ALL pour combiner des requêtes distinctes qui convertissent sélectivement chaque colonne en lignes :

<code class="language-sql">SELECT id, 'a' AS col, a AS value
FROM yourtable
UNION ALL
SELECT id, 'b' AS col, b AS value
FROM yourtable
UNION ALL
SELECT id, 'c' AS col, c AS value
FROM yourtable;</code>

Cette requête génère trois ensembles de données : un pour chaque colonne. Chaque groupe contient l'ID, le nom de la colonne et la valeur correspondante.

Utilisez CROSS JOIN :

Une autre façon consiste à utiliser CROSS JOIN :

<code class="language-sql">SELECT t.id,
       c.col,
       CASE c.col
           WHEN 'a' THEN a
           WHEN 'b' THEN b
           WHEN 'c' THEN c
       END AS data
FROM yourtable t
CROSS JOIN
(
    SELECT 'a' AS col
    UNION ALL SELECT 'b'
    UNION ALL SELECT 'c'
) c;</code>

Dans ce cas, CROSS JOIN crée un produit cartésien entre les lignes de yourtable et les lignes de la sous-requête qui génère les noms de colonnes. L'instruction CASE mappe chaque nom de colonne à sa valeur de colonne correspondante.

Les deux méthodes déroulent efficacement les données, vous donnant la structure par lignes souhaité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:
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