sql >> データベース >  >> RDS >> Mysql

MySQL動的ピボットテーブル

    値はintにあるため それらを列名にしているので、値をバッククォートでラップする必要があります

    SQLは次のようになります:

    max(case when user_id = 1 then score end) as `1`
    

    完全なクエリは次のようになります:

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'max(case when user_id = ''',
          user_id,
          ''' then score end) AS `',
          user_id, '`'
        )
      ) INTO @sql
    FROM  measure2;
    
    SET @sql = CONCAT('SELECT inspection_date, ', @sql, ' 
                      FROM measure2 
                      GROUP BY inspection_date');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    SQL Fiddle withDemo を参照してください。




    1. PostgreSQL8.3以降の全文検索

    2. 例を使用したOracleの一意キー

    3. PostgreSQL複合主キー

    4. Oracleデータベースのテーブルドロップ列を変更する