Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So wählen Sie den Spaltenwert als Spaltennamen mit Bedingungen in der SQL-Tabelle aus

Eine Möglichkeit, dies zu erreichen, ist die Verwendung der bedingten Aggregation

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

Der andere Weg (wenn Sie nur an diesen beiden Spalten interessiert sind) wäre

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';

Annahme ist, dass sowohl Geschlecht als auch Alter für jeden Namen vorhanden sind. Wenn dies nicht der Fall ist, verwenden Sie einen OUTER JOIN anstelle eines INNER JOIN wie so

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';

Ausgabe:

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

Hier ist SQLFiddle Demo