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

mysqlピボット/クロス集計クエリ

    @Johnの静的な回答はうまく機能しますが、変換する列の数が不明な場合は、プリペアドステートメントを使用して結果を取得することを検討します。

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'GROUP_CONCAT((CASE node_id when ',
          node_id,
          ' then entered_value else NULL END)) AS user_input',
          node_id
        )
      ) INTO @sql
    FROM trn_user_log;
    
    
    SET @sql = CONCAT('SELECT app_id, transaction_id, mobile_no, ', @sql, ' 
                      FROM trn_user_log 
                      GROUP BY app_id, transaction_id, mobile_no');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

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

    2つ目は、何をしようとしているのか明確にしないでください。



    1. phpMyAdminで外部キーを設定しますか?

    2. CASEおよびINによる更新-Oracle

    3. PostgreSQLでコンマ区切りリストとしてクエリ結果を返す方法

    4. PostgreSQLの日付から月を抽出する