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

Transpose kueri MySQL - perlu baris menjadi kolom

Anda perlu melakukan PIVOT operasi, yang tidak didukung secara asli di MySQL (tidak seperti beberapa RDBMS lainnya).

Yang paling dekat yang bisa Anda dapatkan adalah dengan membangun SQL di sepanjang baris berikut:

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

Jika memungkinkan Name nilai dinamis, Anda dapat menghasilkan SQL seperti itu dalam bahasa tingkat yang lebih tinggi dari hasil:

SELECT DISTINCT Name FROM search_export

Memang, seseorang bahkan dapat menggunakan SQL itu sendiri:

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;

Perhatikan bahwa jika ada banyak Name . yang berbeda nilai, Anda mungkin perlu meningkatkan group_concat_max_len dari default 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. Memilih 7 hari terakhir dari Sekarang () di MYSQL

  2. Cara membuat database dengan Liquibase

  3. PHP tidak dapat terhubung ke mysql melalui python

  4. MYSQL - Pilih hanya jika baris di LEFT JOIN tidak ada

  5. tetapkan nilai baru untuk ft_min_word_len FULLTEXT di mysql