sql >> Databáze >  >> RDS >> Mysql

Kontingenční tabulka Se 3 tabulkami

Zdá se, že můžete mít neznámý počet poplatků, které chcete převést do sloupců, pokud je tomu tak, budete chtít k dotazu použít připravené výpisy:

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;

Viz SQL Fiddle s ukázkou



  1. PHP - IE nezobrazuje aktualizované hodnoty z databáze. Chrome, FF, Opera - OK

  2. Chyba 2002 Připojení odmítnuto na připojení PHP k MySQL běžící na MAMP

  3. Jak spravujete SQL dotazy

  4. Regulární výraz SQL pro rozdělení sloupce (řetězce) na více řádků na základě oddělovače '/n'