sql >> Databasteknik >  >> RDS >> Mysql

mysql välj dynamiska radvärden som kolumnnamn, en annan kolumn som värde

Till skillnad från vissa andra RDBMS har MySQL inte inbyggt stöd för pivoteringsoperationer av det här slaget efter design (Utvecklarna tycker att det är mer lämpat för presentationen, snarare än databaslagret i din applikation).

Om du absolut måste utföra sådana manipulationer inom MySQL, är att bygga ett förberett uttalande vägen att gå – även om det snarare än att bråka med CASE , jag skulle förmodligen bara använda MySQL:s GROUP_CONCAT() funktion:

SELECT CONCAT(
  'SELECT `table`.id', GROUP_CONCAT('
     ,    `t_', REPLACE(name, '`', '``'), '`.value
         AS `', REPLACE(name, '`', '``'), '`'
     SEPARATOR ''),
 ' FROM `table` ', GROUP_CONCAT('
     LEFT JOIN `table`   AS `t_', REPLACE(name, '`', '``'), '`
            ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id
           AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)
     SEPARATOR ''),
 ' GROUP BY `table`.id'
) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;

PREPARE stmt FROM @qry;
EXECUTE stmt;

Se den på sqlfiddle .

Observera att resultatet av GROUP_CONCAT() begränsas av group_concat_max_len variabel (standard på 1024 byte:är osannolikt relevant här om du inte har något extremt långt namn värden).




  1. Skicka värden som läses från en fil som indata till en SQL-fråga i Oracle

  2. Beräkna procent från SUM() i samma SELECT sql-fråga

  3. Hur man gör en fråga med group_concat i sql-server

  4. Hur ansluter man Postgres till localhost-servern med pgAdmin på Ubuntu?