Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment sélectionner la valeur de colonne comme nom de colonne avec des conditions dans la table SQL

Une façon de procéder consiste à utiliser l'agrégation conditionnelle

SELECT name,
       MAX(CASE WHEN field = 'Gender' THEN value END) gender,
       MAX(CASE WHEN field = 'Age' THEN value END) age
  FROM customers
 GROUP BY name

L'autre façon (si vous n'êtes intéressé que par ces deux colonnes) serait

SELECT c1.name, c1.value gender, c2.value age
  FROM customers c1 JOIN customers c2
    ON c1.name = c2.name
   AND c1.field = 'Gender'
   AND c2.field = 'Age';

L'hypothèse est que le sexe et l'âge existent pour chaque nom. Si ce n'est pas le cas, utilisez un OUTER JOIN au lieu d'un INNER JOIN comme ça

SELECT n.name, c1.value gender, c2.value age
  FROM
(
  SELECT DISTINCT name
    FROM customers
) n LEFT JOIN customers c1
    ON n.name = c1.name AND c1.field = 'Gender' 
    LEFT JOIN customers c2
    ON n.name = c2.name AND c2.field = 'Age';

Sortie :

|   NAME | GENDER | AGE |
|--------|--------|-----|
| Angela | Female |  28 |
|  Davis |   Male |  30 |

Voici SQLFiddle démo