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

MySQLダイナミックピボット

    残念ながら、MySQLにはPIVOTがありません 関数ですが、集計関数とCASEを使用してモデル化できます 声明。動的バージョンの場合、プリペアドステートメントを使用する必要があります:

    SET @sql = NULL;
    SELECT
      GROUP_CONCAT(DISTINCT
        CONCAT(
          'max(case when part_type = ''',
          part_type,
          ''' then part_id end) AS part_',
          part_type, '_id'
        )
      ) INTO @sql
    FROM
      parts;
    SET @sql = CONCAT('SELECT product_id, ', @sql, ' 
                      FROM parts 
                       GROUP BY product_id');
    
    PREPARE stmt FROM @sql;
    EXECUTE stmt;
    DEALLOCATE PREPARE stmt;
    

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

    列が数個しかない場合は、静的バージョンを使用できます:

    select product_id,
      max(case when part_type ='A' then part_id end) as Part_A_Id,
      max(case when part_type ='B' then part_id end) as Part_B_Id
    from parts
    group by product_id
    


    1. MySQLのBLOB列に入れることができるデータの最大長はどれくらいですか?

    2. SQL Server履歴テーブル-SPまたはトリガーを介してデータを入力しますか?

    3. SQLの基本コマンド:例を使用して単純なクエリを作成する方法

    4. SSMSを使用したSQLServerエージェントのジョブ履歴の表示