sql >> Databáze >  >> RDS >> Mysql

Transponujte dotaz MySQL - potřebujete řádky do sloupců

Musíte provést PIVOT operace, která není v MySQL nativně podporována (na rozdíl od některých jiných RDBMS).

Nejblíže se můžete dostat k vytvoření SQL podle následujících řádků:

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

Pokud je to možné Jméno hodnoty jsou dynamické, takové SQL byste mohli vygenerovat v jazyce vyšší úrovně z výsledků:

SELECT DISTINCT Name FROM search_export

Dalo by se dokonce použít samotné 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;

Všimněte si, že pokud existuje mnoho různých Jméno hodnoty, možná budete muset zvýšit group_concat_max_len z výchozí hodnoty 1 kB.




  1. Funkce NLS_CHARSET_DECL_LEN() v Oracle

  2. Jak povolit kompresi na existující tabulce v SQL Server (T-SQL)

  3. Přidání vztahu jedna k mnoha k referenčnímu rodiči/dítěti

  4. Získejte aktualizované položky tabulky MySQL v pythonu bez uzavření připojení