Mysql
 sql >> база данни >  >> RDS >> Mysql

Транспониране на MySQL заявка - нужда от редове в колони

Трябва да извършите PIVOT операция, която не се поддържа първоначално в MySQL (за разлика от някои други RDBMS).

Най-близкото, до което можете да стигнете, е да конструирате SQL по следните редове:

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

Ако е възможно Име стойностите са динамични, можете да генерирате такъв SQL на език от по-високо ниво от резултатите от:

SELECT DISTINCT Name FROM search_export

Всъщност човек може дори да използва самия 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;

Имайте предвид, че ако има много различни Име стойности, може да се наложи да увеличите group_concat_max_len от неговото подразбиране от 1KiB.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изберете най-добрите N реда на група в MySQL

  2. Как мога да изчистя екрана в MySQL конзолата?

  3. Как да направя тиха инсталация на mysql в inno настройка?

  4. Деактивирайте защитения priv за зареждане на данни в MySQL

  5. mysql_data_seek еквивалент на pdo