sql >> Database teknologi >  >> RDS >> Mysql

MySQL dynamisk pivot

MySQL har desværre ikke en PIVOT funktion, men du kan modellere den ved hjælp af en aggregeret funktion og en CASE udmelding. For en dynamisk version skal du bruge forberedte udsagn:

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;

Se SQL-fiffel med demo

Hvis du kun havde nogle få kolonner, så kan du bruge en statisk version:

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. Gruppér efter alias (Oracle)

  2. Sådan viser du alle lokaliteter i MariaDB

  3. hvis (vælg antal(kolonne) fra tabellen)> 0 så

  4. PostgreSQL Top lærings- og træningsressourcer