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

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

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

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

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!

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