Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Pivot Table Mit 3 Tischen

Es sieht so aus, als hätten Sie eine unbekannte Anzahl von Gebühren, die Sie in Spalten umwandeln möchten. Wenn dies der Fall ist, sollten Sie vorbereitete Anweisungen verwenden, um dies abzufragen:

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;

Siehe SQL Fiddle mit Demo