Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Stół obrotowy z 3 stołami

Wygląda na to, że możesz mieć nieznaną liczbę opłat, które chcesz przekształcić w kolumny, jeśli tak jest, będziesz chciał użyć przygotowanych wyciągów do zapytania o to:

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;

Zobacz SQL Fiddle z wersją demonstracyjną



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel Wymowna relacja między 3 stolikami

  2. MySQL GROUP BY i COUNT

  3. Pobierz insert_id dla wszystkich wierszy wstawionych do pojedynczego zapytania mysqli (wiele wartości)

  4. Błąd MySQL:mysql_fetch_assoc() oczekuje, że parametr 1 będzie zasobem

  5. jak zrozumieć nie można połączyć komunikatów o błędach mysql?