Maison >base de données >tutoriel mysql >Comment faire pivoter les données dans MySQL avec des noms de colonnes dynamiques à partir d'une seule colonne ?

Comment faire pivoter les données dans MySQL avec des noms de colonnes dynamiques à partir d'une seule colonne ?

Linda Hamilton
Linda Hamiltonoriginal
2025-01-13 19:57:44230parcourir

How to Pivot Data in MySQL with Dynamic Column Names from a Single Column?

Valeur de ligne dynamique MySQL comme pivot de nom de colonne

Question :

Dans les anciennes tables MySQL, vos données avaient des noms de colonnes mutables stockés sous forme de valeurs uniques dans une seule colonne nommée "nom". Vous avez besoin d'une requête qui convertit ces données dans un format pivot, où les valeurs de nom deviennent les en-têtes de colonne et les valeurs de champ correspondantes deviennent les valeurs sous ces en-têtes.

Solution :

Malgré le manque de support natif pour les pivots, MySQL peut toujours y parvenir grâce au SQL dynamique et à la fonction GROUP_CONCAT().

Requête MySQL :

<code class="language-sql">SELECT CONCAT(
  'SELECT `table`.id', GROUP_CONCAT('
     ,    `t_', REPLACE(name, '`', '``'), '`.value
         AS `', REPLACE(name, '`', '``'), '`'
     SEPARATOR ''),
 ' FROM `table` ', GROUP_CONCAT('
     LEFT JOIN `table`   AS `t_', REPLACE(name, '`', '``'), '`
            ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id
           AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)
     SEPARATOR ''),
 ' GROUP BY `table`.id'
) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;

PREPARE stmt FROM @qry;
EXECUTE stmt;</code>

Instructions :

  1. La sous-requête sélectionne différentes valeurs de nom et génère une requête UNION pour représenter les différents noms de colonnes requis pour le pivot.
  2. La fonction CONCAT() concatène les chaînes SQL et utilise GROUP_CONCAT pour connecter dynamiquement les noms de colonnes avec leurs valeurs.
  3. Il crée une procédure stockée temporaire stmt en utilisant la chaîne SQL générée.
  4. L'instruction EXECUTE stmt exécute des requêtes SQL dynamiques, faisant pivoter les données comme prévu.

Résultat :

La requête renvoie un ensemble de résultats pivoté avec des valeurs de nom comme en-têtes de colonne et des valeurs de champ comme valeurs correspondantes :

id timezone language country something
0 Europe/London en 45 x
1 Europe/Paris fr 46 NULL

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