Điều này được thực hiện với bảng tổng hợp . Nhóm theo id
, bạn phát hành CASE
các câu lệnh cho mỗi giá trị bạn muốn nắm bắt trong một cột và sử dụng một cái gì đó như MAX()
tổng hợp để loại bỏ các giá trị rỗng và thu gọn xuống một hàng.
SELECT
id,
/* if col1 matches the name string of this CASE, return col2, otherwise return NULL */
/* Then, the outer MAX() aggregate will eliminate all NULLs and collapse it down to one row per id */
MAX(CASE WHEN (col1 = 'name') THEN col2 ELSE NULL END) AS name,
MAX(CASE WHEN (col1 = 'name2') THEN col2 ELSE NULL END) AS name2,
MAX(CASE WHEN (col1 = 'name3') THEN col2 ELSE NULL END) AS name3
FROM
yourtable
GROUP BY id
ORDER BY id
Đây là một mẫu hoạt động
Lưu ý:Điều này chỉ hoạt động đối với một số lượng hữu hạn và đã biết các giá trị có thể có cho col1
. Nếu số lượng giá trị có thể là không xác định, bạn cần phải tạo động câu lệnh SQL trong một vòng lặp.