Có vẻ như bạn có thể có một số khoản phí không xác định mà bạn muốn chuyển thành các cột, nếu đúng như vậy thì bạn sẽ muốn sử dụng các câu lệnh đã chuẩn bị để truy vấn điều này:
SET @sql = NULL;
SELECT
GROUP_CONCAT(DISTINCT
CONCAT(
'max(case when f.fee_name = ''',
f.fee_name,
''' then f.fee_amount else 0 end) AS `',
f.fee_name, '`'
)
) INTO @sql
FROM fee f;
SET @sql = CONCAT('SELECT s.school_id, ', @sql, '
, sum(f.fee_amount) as Total
FROM students s
LEFT JOIN stud_fee sf
on s.id = sf.stud_id
LEFT JOIN fee f
on sf.fee_id = f.id
GROUP BY s.school_id');
PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;