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

Wählen Sie dynamische Spalten in mysql aus

Leider hat MySQL keinen PIVOT Funktion, die im Grunde das ist, was Sie versuchen zu tun. Sie müssen also eine Aggregatfunktion mit einem CASE verwenden Aussage:

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

Siehe SQL-Geige mit Demo

Wenn Sie dies nun dynamisch durchführen möchten, d. h. Sie die zu transponierenden Spalten nicht im Voraus kennen, sollten Sie den folgenden Artikel lesen:

Dynamische Pivot-Tabellen (Zeilen in Spalten umwandeln)

Ihr Code würde so aussehen:

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;

Siehe SQL-Fiddle mit Demo