Изглежда, че може да имате неизвестен брой такси, които искате да превърнете в колони, ако случаят е такъв, ще искате да използвате подготвени извлечения, за да направите запитване за това:
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;
Вижте SQL Fiddle с демонстрация