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

Transponer MySQL-forespørgsel - brug for rækker til kolonner

Du skal udføre en PIVOT operation, som ikke understøttes indbygget i MySQL (i modsætning til nogle andre RDBMS).

Det tætteste du kan komme er at konstruere SQL på følgende linjer:

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

Hvis det mulige Navn værdier er dynamiske, kan du generere en sådan SQL i et sprog på et højere niveau ud fra resultaterne af:

SELECT DISTINCT Name FROM search_export

Faktisk kunne man endda bruge SQL selv:

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;

Bemærk, at hvis der er mange forskellige Navn værdier, skal du muligvis øge group_concat_max_len fra standardværdien på 1KiB.




  1. Sådan vælger du poster én efter én uden at gentage

  2. Bedste fremgangsmåder til at arbejde med flere tabeller

  3. Formater sysjobhistorie, dato og varighed Kolonner i SQL Server

  4. kopiering af databasefil fra /aktiver til /data/datamappe i filstifinder - Android