sql >> Databasteknik >  >> RDS >> Mysql

Välj dynamiska kolumner i mysql

Tyvärr har MySQL ingen PIVOT funktion som i princip är vad du försöker göra. Så du kommer att behöva använda en aggregatfunktion med en CASE uttalande:

SELECT type,
  sum(case when criteria_id = 'env' then result end) env,
  sum(case when criteria_id = 'gas' then result end) gas,
  sum(case when criteria_id = 'age' then result end) age
FROM results
group by type

Se SQL-fiol med demo

Om du nu vill utföra detta dynamiskt, vilket innebär att du inte i förväg vet vilka kolumner som ska överföras, bör du läsa följande artikel:

Dynamiska pivottabeller (omvandla rader till kolumner)

Din kod skulle se ut så här:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'SUM(IF(CRITERIA_ID = ''',
      CRITERIA_ID,
      ''', RESULT, NULL)) AS ',
      CRITERIA_ID
    )
  ) INTO @sql
FROM
  Results;
SET @sql = CONCAT('SELECT type, ', @sql, ' FROM Results GROUP BY type');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Se SQL-fiol med demo




  1. Installera webbserver i FreeBSD 6.0 med Apache 2.2, MySQL 5.0 och PHP 5 – Del 3

  2. Hur kan jag hasha lösenord i postgresql?

  3. 3 sätt att konvertera ett heltal till decimal i SQL Server

  4. Skapa en tillfällig tabell baserad på en annan tabell i SQL Server