Maison >base de données >tutoriel mysql >Comment puis-je transposer les valeurs de champ définies par l'utilisateur en SQL ?

Comment puis-je transposer les valeurs de champ définies par l'utilisateur en SQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-05 02:10:40267parcourir

How Can I Transpose User-Defined Field Values in SQL?

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!

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