Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Transpor a consulta do MySQL - precisa de linhas em colunas


Você precisa executar um PIVOT operação, que não é suportada nativamente no MySQL (diferente de alguns outros RDBMS).

O mais próximo que você pode obter é construir SQL ao longo das seguintes linhas:
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

Se o possível Nome os valores são dinâmicos, você pode gerar esse SQL em uma linguagem de nível superior a partir dos resultados de:
SELECT DISTINCT Name FROM search_export

De fato, pode-se até usar o próprio 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;

Observe que, se houver muitos Nome diferentes valores, pode ser necessário aumentar group_concat_max_len de seu padrão de 1KiB.