Techniques de transposition SQL pour les valeurs de champ définies par l'utilisateur
En SQL, vous pouvez rencontrer des situations dans lesquelles vous devez transposer des données stockées dans des lignes vers former des colonnes. Un tel exemple est lorsque vous avez un tableau comme celui décrit ci-dessous :
================================================ | Id | UserId | FieldName | FieldValue | =====+========+===============+================| | 1 | 100 | Username | John Doe | |----+--------+---------------+----------------| | 2 | 100 | Password | pass123! | |----+--------+---------------+----------------| | 3 | 102 | Username | Jane | |----+--------+---------------+----------------| | 4 | 102 | Password | $ecret | |----+--------+---------------+----------------| | 5 | 102 | Email Address | [email protected] | ------------------------------------------------
Pour transposer ces données dans un format où les FieldNames deviennent des en-têtes de colonne et les FieldValues forment les données de ligne correspondantes, vous pouvez exploiter le requête SQL suivante :
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 TABLE t GROUP BY t.userid
Cependant, pour que cette approche fonctionne efficacement, vous devrez définir des instructions CASE pour chaque valeur FieldName attendue. Pour améliorer la flexibilité, envisagez d'implémenter la syntaxe d'instruction préparée (SQL dynamique) de MySQL pour générer dynamiquement ces instructions CASE.
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!