Maison >base de données >tutoriel mysql >Comment faire pivoter les valeurs de lignes dynamiques en noms de colonnes dans MySQL ?

Comment faire pivoter les valeurs de lignes dynamiques en noms de colonnes dans MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-13 19:52:44579parcourir

How to Pivot Dynamic Row Values into Column Names in MySQL?

Convertir les valeurs de lignes dynamiques en noms de colonnes à l'aide de MySQL

Dans les tableaux existants avec des structures fixes, obtenir des données au format pivot peut être un défi. MySQL ne dispose pas de fonctions pivot natives et nécessite l'utilisation d'instructions préparées pour résoudre ce problème.

Considérez le tableau d'héritage suivant :

<code>id    name       value
------------------------------
0     timezone   Europe/London
0     language   en
0     country    45
0     something  x
1     timezone   Europe/Paris
1     language   fr
1     country    46</code>

Sortie souhaitée, utilisant les valeurs de lignes dynamiques comme noms de colonnes :

<code>id    timezone       language    country  something
---------------------------------------------------
0     Europe/London  en          45       x
1     Europe/Paris   fr          46</code>

Contrairement aux autres SGBDR, MySQL nécessite une approche d'indirection. La construction de déclarations préparées est l’approche privilégiée.

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

Cette requête utilise GROUP_CONCAT() pour créer une instruction SQL dynamique afin de connecter les JOIN et les alias de colonne nécessaires. Les instructions SQL générées sont ensuite préparées et exécutées.

Cette approche permet d'utiliser des valeurs de ligne uniques comme noms de colonnes variables sans avoir besoin de sous-sélections codées en dur ou d'instructions CASE. Bien que cela puisse nécessiter plus de configuration, il fournit une solution plus flexible et plus efficace pour faire pivoter les données dans MySQL.

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