Maison > base de données > tutoriel mysql > Comment transposer dynamiquement une table en SQL à l'aide d'instructions préparées ?

Comment transposer dynamiquement une table en SQL à l'aide d'instructions préparées ?

Susan Sarandon
Libérer: 2025-01-06 03:58:40
original
740 Les gens l'ont consulté

How to Dynamically Transpose a Table in SQL Using Prepared Statements?

Comment transposer une table à l'aide de Dynamic SQL

En SQL, transposer une table implique de convertir une table orientée lignes en une table orientée colonnes. Cela peut être utile pour divers scénarios, tels que la création d'un rapport de synthèse utilisateur.

Une approche pour réaliser la transposition en SQL consiste à utiliser l'instruction CASE. Considérons une table avec des colonnes : Id, UserId, FieldName et FieldValue, comme indiqué dans l'exemple fourni.

SELECT t.userid,
       MAX(CASE WHEN t.fieldname = 'Username' THEN t.fieldvalue ELSE NULL END) AS Username,
       MAX(CASE WHEN t.fieldname = 'Password' THEN t.fieldvalue ELSE NULL END) AS Password,
       MAX(CASE WHEN t.fieldname = 'Email Address' THEN t.fieldvalue ELSE NULL END) AS Email
FROM t
GROUP BY t.userid
Copier après la connexion

Cette requête renverra le résultat transposé, regroupant les utilisateurs par UserId et attribuant les valeurs de champ correspondantes à les colonnes Nom d'utilisateur, Mot de passe et Adresse e-mail.

Cependant, cette approche nécessite de définir des instructions CASE pour chaque champ, ce qui peut être fastidieux et inflexible. Pour rendre cela dynamique, vous pouvez utiliser la syntaxe d'instruction préparée (SQL dynamique) de MySQL.

SET @sql = CONCAT("SELECT userid");
-- Dynamically create the field selection part
SET @field_list = (
  SELECT GROUP_CONCAT(
    CONCAT('MAX(CASE WHEN t.fieldname = ''', fieldname, ''' THEN t.fieldvalue ELSE NULL END) AS ', fieldname)
  )
  FROM t
  GROUP BY userid
);
SET @sql = CONCAT(@sql, ", ", @field_list);

SET @sql = CONCAT(@sql, " FROM t GROUP BY userid");
PREPARE stmt FROM @sql;
EXECUTE stmt;
Copier après la connexion

Cette requête construit une instruction SQL dynamique en utilisant le résultat d'une sous-requête pour déterminer la partie de sélection de champ. Il utilise la fonction GROUP_CONCAT pour concaténer les instructions CASE, garantissant ainsi la validité de la requête SQL construite dynamiquement.

En utilisant le SQL dynamique, vous pouvez éviter de définir manuellement les instructions CASE et conserver la flexibilité, permettant à votre requête de gérer n'importe quel nombre. de champs définis par l'utilisateur.

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