sql >> Database >  >> RDS >> Mysql

Transponeer MySQL-query - rijen nodig in kolommen

U moet een PIVOT . uitvoeren bewerking, die niet standaard wordt ondersteund in MySQL (in tegenstelling tot sommige andere RDBMS).

Het dichtst in de buurt komt door SQL als volgt te construeren:

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

Als de mogelijke Naam waarden dynamisch zijn, kunt u een dergelijke SQL in een taal van een hoger niveau genereren uit de resultaten van:

SELECT DISTINCT Name FROM search_export

Je zou zelfs SQL zelf kunnen gebruiken:

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;

Merk op dat als er veel verschillende Naam . zijn waarden, moet u mogelijk group_concat_max_len van de standaardwaarde van 1KiB.




  1. Het kantelpunt visualiseren met Plan Explorer

  2. ADDTIME() Voorbeelden – MySQL

  3. 500 - Er is een fout opgetreden – DB-functie meldt geen fouten bij het toevoegen van een nieuw artikel in Joomla

  4. Opgeslagen procedure uitvoeren in SQL Developer?