Mysql
 sql >> Database >  >> RDS >> Mysql

Seleziona le colonne dinamiche in mysql

Sfortunatamente MySQL non ha un PIVOT funzione che è fondamentalmente ciò che stai cercando di fare. Quindi dovrai utilizzare una funzione di aggregazione con un CASE dichiarazione:

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

Vedi SQL Fiddle con demo

Ora, se vuoi eseguire questa operazione in modo dinamico, il che significa che non conosci in anticipo le colonne da trasporre, dovresti rivedere il seguente articolo:

Tabelle pivot dinamiche (trasforma le righe in colonne)

Il tuo codice sarebbe simile a questo:

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;

Vedi SQL Fiddle con demo