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 withDemo を参照してください。



    1. テーブルの取得エラーは存在しませんが、テーブルは存在します(ActiveRecord ::StatementInvalid Mysql2 ::Error:テーブルは存在しません)

    2. ソート列、複合インデックス(MySQL)の主キーを含める必要があります

    3. PL / SQL:プロシージャでユーザー入力を促すにはどうすればよいですか?

    4. SQLクエリを再定式化する方法