Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Transponieren Sie die MySQL-Abfrage - benötigen Sie Zeilen in Spalten

Sie müssen einen PIVOT durchführen Vorgang, der in MySQL nicht nativ unterstützt wird (im Gegensatz zu einigen anderen RDBMS).

Das Beste, was Sie erreichen können, ist, SQL wie folgt zu konstruieren:

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

Wenn der mögliche Name Werte dynamisch sind, könnten Sie solches SQL in einer höheren Programmiersprache aus den Ergebnissen von generieren:

SELECT DISTINCT Name FROM search_export

Tatsächlich könnte man sogar SQL selbst verwenden:

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;

Beachten Sie, dass es viele verschiedene Namen gibt Werte müssen Sie möglicherweise group_concat_max_len von der Standardgröße von 1 KiB.