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
Libérer: 2025-01-13 19:57:44
original
290 Les gens l'ont consulté

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 :

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

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 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