sql >> Database >  >> RDS >> Mysql

Hoe Kolomwaarde te selecteren als Kolomnaam met voorwaarden in SQL-tabel?

Een manier om dit te doen, is door voorwaardelijke aggregatie te gebruiken

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

De andere manier (als je alleen geïnteresseerd bent in deze twee kolommen) zou zijn

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

Aanname is dat voor elke naam zowel geslacht als leeftijd bestaan. Is dit niet het geval, gebruik dan een OUTER JOIN in plaats van een INNER JOIN leuk vinden

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

Uitgang:

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

Hier is SQLFiddle demo



  1. Weken toevoegen aan een datum in PostgreSQL

  2. Hoe geef ik een lijst door als parameter in een opgeslagen procedure?

  3. Database reorgs – Waarom ze belangrijk zijn

  4. MySQL ABS() Functie – Retourneert de absolute waarde van een getal