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
Libérer: 2025-01-14 10:00:45
original
270 Les gens l'ont consulté

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

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

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

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

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!

source:php.cn
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal