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

Comment faire pivoter dynamiquement des lignes en colonnes dans MySQL ?

Patricia Arquette
Patricia Arquetteoriginal
2025-01-14 10:00:45266parcourir

How to Dynamically Pivot Rows into Columns in MySQL?

Compétences de conversion dynamique de lignes et de colonnes MySQL

Dans MySQL, la conversion dynamique de lignes en colonnes, tout en ajoutant dynamiquement des colonnes pour accueillir de nouvelles lignes, peut être réalisée à l'aide de diverses techniques.

Utilisez les fonctions GROUP BY et MAX

Une façon consiste à utiliser les fonctions GROUP BY et MAX. Par exemple, considérons un tableau avec des lignes et des colonnes comme celui-ci :

<code>表A

+--+-----+----+
| id | order | data |
+--+-----+----+
| 1  | 1    | P    |
| 2  | 2    | Q    |
| 2  | 1    | R    |
| 1  | 2    | S    |
+--+-----+----+</code>

Pour convertir ces lignes en colonnes, vous pouvez utiliser la requête suivante :

<code>SELECT  ID,
        MAX(IF(`order` = 1, data, NULL)) data1,
        MAX(IF(`order` = 2, data, NULL)) data2
FROM    TableA
GROUP   BY ID</code>

Cette requête regroupe les lignes en fonction de la colonne ID et renvoie la valeur correspondante pour chaque colonne de commande à l'aide des instructions MAX et IF. Le résultat sera :

<code>+--+-----+-----+
| id | data1 | data2 |
+--+-----+-----+
| 1  | P    | S    |
| 2  | R    | Q    |
+--+-----+-----+</code>

Utiliser le SQL dynamique

Si la colonne de commande a plusieurs valeurs, il peut être plus approprié d'utiliser du SQL dynamique. Cela permet aux requêtes d'être générées dynamiquement et de s'adapter à différentes quantités de commandes.

<code>SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'MAX(IF(`order` = ', `order`, ',data,NULL)) AS data', `order`)
  ) INTO @sql
FROM TableName;

SET @sql = CONCAT('SELECT  ID, ', @sql, ' 
                  FROM    TableName
                  GROUP   BY ID');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;</code>

En générant dynamiquement des requêtes basées sur différentes valeurs d'ordre, cette approche offre de la flexibilité et garantit que la table de résultats s'adaptera automatiquement à toute modification des données.

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