Một cách để giải quyết vấn đề này là sử dụng kết hợp có điều kiện
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
Theo cách khác (nếu bạn chỉ quan tâm đến hai cột này) sẽ là
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';
Giả định rằng cả Giới tính và Tuổi đều tồn tại cho mỗi Tên. Đó không phải là trường hợp sau đó sử dụng OUTER JOIN
thay vì INNER JOIN
như vậy
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';
Đầu ra:
| NAME | GENDER | AGE | |--------|--------|-----| | Angela | Female | 28 | | Davis | Male | 30 |
Đây là SQLFiddle bản demo