Maison >base de données >tutoriel mysql >Comment convertir dynamiquement des lignes en colonnes dans 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>
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>
Le résultat de cette requête sera :
<code>+--+-----+-----+ |id|data1|data2| +--+-----+-----+ |1 |P |S | +--+-----+-----+ |2 |R |Q | +--+-----+-----+</code>
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>
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!