sql >> Databasteknik >  >> RDS >> Mysql

Pivotbord Med 3 bord

Det ser ut som att du kan ha ett okänt antal avgifter som du vill förvandla till kolumner, om så är fallet kommer du att vilja använda förberedda uttalanden för att fråga detta:

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;

Se SQL-fiol med demo



  1. Concat i If-satsen

  2. RETURNING orsakar fel:FROM-satspost saknas för tabellen

  3. MySQL sammanfogar en sträng till en kolumn

  4. Hur genererar man sekventiellt radnummer i tsql?