Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

MySQL dynamic-pivot

Rất tiếc, MySQL không có PIVOT nhưng bạn có thể lập mô hình nó bằng hàm tổng hợp và CASE tuyên bố. Đối với phiên bản động, bạn sẽ cần sử dụng các câu lệnh đã chuẩn bị:

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;

Xem SQL Fiddle With Demo

Nếu bạn chỉ có một vài cột, thì bạn có thể sử dụng phiên bản Tĩnh:

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. MySQL:Phân tích nhanh các loại liên kết

  2. Làm thế nào để chuyển đổi thời gian MySQL

  3. MySQL chọn với điều kiện CONCAT

  4. Các câu lệnh SELECT được sử dụng có một số cột khác nhau (REDUX !!)

  5. Các lệnh quản trị cơ sở dữ liệu cơ bản của MySQL - Phần I