Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pivot dynamique MySQL

Malheureusement, MySQL n'a pas de PIVOT fonction mais vous pouvez la modéliser en utilisant une fonction d'agrégation et un CASE déclaration. Pour une version dynamique, vous devrez utiliser des instructions préparées :

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;

Voir SQL Fiddle avec démo

Si vous n'aviez que quelques colonnes, vous pouvez utiliser une version statique :

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