Mysql
 sql >> база данни >  >> RDS >> Mysql

Пивот таблица С 3 таблици

Изглежда, че може да имате неизвестен брой такси, които искате да превърнете в колони, ако случаят е такъв, ще искате да използвате подготвени извлечения, за да направите запитване за това:

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;

Вижте SQL Fiddle с демонстрация



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Предоставяне на изчакване на скрипт, преминало при импортиране на база данни

  2. Codeigniter превключва към вторична база данни, ако основната не работи

  3. PHP ехо връща думата „Масив“

  4. Разликите между INT и UUID в MySQL

  5. Последно актуализиран идентификатор на ред в Mysql