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