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

Comment convertir dynamiquement des lignes en colonnes dans MySQL ?

Patricia Arquette
Libérer: 2025-01-14 11:22:46
original
817 Les gens l'ont consulté

How to Dynamically Convert Rows to Columns in MySQL?

Requête dynamique de ligne à colonne MySQL

MySQL prend en charge la conversion des données de ligne en données de colonne, permettant ainsi d'ajouter dynamiquement de nouvelles colonnes selon les besoins. Ce processus est souvent associé aux tableaux croisés dynamiques, qui présentent les données dans un format tabulaire plus convivial. Pour réaliser cette conversion, vous pouvez utiliser les fonctions GROUP BY et MAX.

Ce qui suit est un exemple contenant le tableau A et le tableau B :

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

表 B
+--+----+----+
|id|name|value|
+--+----+----+
|1 |name1|data1|
+--+----+----+
|1 |name2|data2|
+--+----+----+
|2 |name1|data3|
+--+----+----+
|2 |name2|data4|
+--+----+----+</code>
Copier après la connexion

Pour convertir cette structure de données en un tableau avec des lignes et des colonnes, vous pouvez utiliser la requête suivante :

<code class="language-sql">SELECT  ID,
        MAX(IF(`order` = 1, data, NULL)) AS data1,
        MAX(IF(`order` = 2, data, NULL)) AS data2
FROM    TableA
GROUP   BY ID</code>
Copier après la connexion

Le résultat de cette requête sera :

<code>+--+-----+-----+
|id|data1|data2|
+--+-----+-----+
|1 |P    |S    |
+--+-----+-----+
|2 |R    |Q    |
+--+-----+-----+</code>
Copier après la connexion

Comme vous pouvez le voir, chaque ligne du tableau B a été convertie en colonne dans le tableau résultant.

Si vos données contiennent plusieurs valeurs pour le même champ « commande », vous pouvez combiner du SQL dynamique pour gérer la transformation plus efficacement. Cette méthode consiste à générer dynamiquement des requêtes basées sur différentes valeurs du champ "order" :

<code class="language-sql">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

L'avantage de cette approche SQL dynamique est qu'il n'est pas nécessaire de modifier manuellement la requête à chaque fois qu'une nouvelle valeur est ajoutée au champ "order".

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