Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pivot dinamis MySQL

Sayangnya, MySQL tidak memiliki PIVOT fungsi tetapi Anda dapat memodelkannya menggunakan fungsi agregat dan CASE penyataan. Untuk versi dinamis, Anda perlu menggunakan pernyataan yang telah disiapkan:

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;

Lihat SQL Fiddle With Demo

Jika Anda hanya memiliki beberapa kolom, Anda dapat menggunakan versi Statis:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bisakah saya menggabungkan beberapa baris MySQL menjadi satu bidang?

  2. Apakah ada cara sederhana untuk mengubah data MySQL menjadi Judul Kasus?

  3. Koneksi Jarak Jauh Mysql Ubuntu

  4. Pratinjau dan unggah gambar menggunakan database PHP dan MySQL

  5. SQL pilih hanya baris dengan nilai maksimal pada kolom