Rất tiếc, MySQL không có PIVOT
về cơ bản là những gì bạn đang cố gắng thực hiện. Vì vậy, bạn sẽ cần sử dụng một hàm tổng hợp với CASE
tuyên bố:
SELECT type,
sum(case when criteria_id = 'env' then result end) env,
sum(case when criteria_id = 'gas' then result end) gas,
sum(case when criteria_id = 'age' then result end) age
FROM results
group by type
Bây giờ nếu bạn muốn thực hiện điều này động, nghĩa là bạn không biết trước các cột cần chuyển vị, thì bạn nên xem lại bài viết sau:
Bảng tổng hợp động (chuyển đổi hàng thành cột)
Mã của bạn sẽ giống như sau:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'SUM(IF(CRITERIA_ID = ''',
CRITERIA_ID,
''', RESULT, NULL)) AS ',
CRITERIA_ID
)
) INTO @sql
FROM
Results;
SET @sql = CONCAT('SELECT type, ', @sql, ' FROM Results GROUP BY type');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;