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

Chuyển đổi truy vấn MySQL - cần các hàng thành cột

Bạn cần thực hiện PIVOT hoạt động này không được hỗ trợ nguyên bản trong MySQL (không giống như một số RDBMS khác).

Cách gần nhất bạn có thể làm là xây dựng SQL theo các dòng sau:

SELECT   ProductId,
         GROUP_CONCAT(IF(Name='Brand Name'          ,value,NULL))
           AS `Brand Name`,
         GROUP_CONCAT(IF(Name='Ethernet Technology' ,value,NULL))
           AS `Ethernet Technology`,
         GROUP_CONCAT(IF(Name='Form Factor'         ,value,NULL))
           AS `Form Factor`,
         GROUP_CONCAT(IF(Name='Media Type Supported',value,NULL))
           AS `Media Type Supported`
FROM     search_export
GROUP BY ProductId

Nếu có thể Tên các giá trị là động, bạn có thể tạo SQL như vậy bằng ngôn ngữ cấp cao hơn từ kết quả của:

SELECT DISTINCT Name FROM search_export

Thật vậy, người ta thậm chí có thể sử dụng chính SQL:

SELECT CONCAT('
         SELECT   ProductId, ',
       GROUP_CONCAT('
                  GROUP_CONCAT(IF(Name=',QUOTE(Name),',value,NULL))
                    AS `',REPLACE(Name,'`','``'),'`'
       ), '
         FROM     search_export
         GROUP BY ProductId
       ')
INTO @sql
FROM (
  SELECT DISTINCT Name FROM search_export
) t;

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Lưu ý rằng nếu có nhiều Tên khác nhau , bạn có thể cần tăng group_concat_max_len từ mặc định là 1KiB.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách thêm Ràng buộc NOT NULL trong MySQL

  2. virtualenv có thể tìm các thủ thư đã được di dời (như mysqlclient lib cho MySQLdb)

  3. B-Tree vs Bash Table

  4. Hướng dẫn MySQL Workbench - Hướng dẫn Toàn diện về Công cụ RDBMS

  5. Làm cách nào để làm chậm kết xuất MySQL để không ảnh hưởng đến tải hiện tại trên máy chủ?