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

動的列を使用したMySQLピボットテーブルクエリ

    MySQLでこれを動的に行う唯一の方法は、Preparedステートメントを使用することです。ここにそれらについての良い記事があります:

    動的ピボットテーブル(行を列に変換)

    コードは次のようになります:

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'MAX(IF(pa.fieldname = ''',
          fieldname,
          ''', pa.fieldvalue, NULL)) AS ',
          fieldname
        )
      ) INTO @sql
    FROM product_additional;
    
    SET @sql = CONCAT('SELECT p.id
                        , p.name
                        , p.description, ', @sql, ' 
                       FROM product p
                       LEFT JOIN product_additional AS pa 
                        ON p.id = pa.id
                       GROUP BY p.id, p.name, p.description');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

    デモ を参照してください。

    注:GROUP_CONCAT関数には1024文字の制限があります。パラメータgroup_concat_max_len

    を参照してください

    1. 「S-Q-L」または「続編」と発音されますか?

    2. TimescaleDBの自動フェイルオーバーを実現する方法

    3. 変数を使用したSQL使用ステートメント

    4. Laravel5.2-Eloquentテーブルのカスタム主キーとして文字列を使用すると0になります