Един от начините да направите това е да използвате условно агрегиране
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
Другият начин (ако се интересувате само от тези две колони) би бил
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';
Предполага се, че за всяко име съществуват както пол, така и възраст. Ако не е така, тогава използвайте OUTER JOIN
вместо INNER JOIN
така
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';
Изход:
<пред>| ИМЕ | ПОЛ | ВЪЗРАСТ ||--------|-------|-----|| Анджела | Жена | 28 || Дейвис | Мъжки | 30 |Ето SQLPiddle демонстрация