Rất tiếc, MySQL không có PIVOT
nhưng bạn có thể lập mô hình nó bằng hàm tổng hợp và CASE
tuyên bố. Đối với phiên bản động, bạn sẽ cần sử dụng các câu lệnh đã chuẩn bị:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when part_type = ''',
part_type,
''' then part_id end) AS part_',
part_type, '_id'
)
) INTO @sql
FROM
parts;
SET @sql = CONCAT('SELECT product_id, ', @sql, '
FROM parts
GROUP BY product_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
Nếu bạn chỉ có một vài cột, thì bạn có thể sử dụng phiên bản Tĩnh:
select product_id,
max(case when part_type ='A' then part_id end) as Part_A_Id,
max(case when part_type ='B' then part_id end) as Part_B_Id
from parts
group by product_id