看起来您想转换成几列的费用可能未知,如果是这种情况,那么您将需要使用准备好的语句来查询以下内容:
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 @sqlFROM 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



