sql >> Databasteknik >  >> RDS >> Mysql

Transponera MySQL-fråga - behöver rader till kolumner

Du måste utföra en PIVOT operation, som inte stöds inbyggt i MySQL (till skillnad från vissa andra RDBMS).

Det närmaste du kan komma är att konstruera SQL på följande sätt:

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

Om möjligt Namn värden är dynamiska, kan du generera sådan SQL på ett språk på högre nivå från resultaten av:

SELECT DISTINCT Name FROM search_export

Faktum är att man till och med kan använda SQL själv:

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;

Observera att om det finns många olika Namn värden kan du behöva öka group_concat_max_len från dess standard på 1KiB.




  1. PostgreSql INSERT FRÅN SELECT RETURNING ID

  2. Django prefetch_related med limit

  3. Slå in några indata med dess kryssruta och skicka till databasen

  4. Använda pseudokolumner med en länkad server