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