Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Selecione colunas dinâmicas no mysql


Infelizmente o MySQL não tem um PIVOT função que é basicamente o que você está tentando fazer. Portanto, você precisará usar uma função agregada com um CASE demonstração:
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

Consulte SQL Fiddle with Demo

Agora, se você deseja fazer isso dinamicamente, ou seja, não sabe com antecedência as colunas a serem transpostas, consulte o seguinte artigo:

Tabelas dinâmicas (transformar linhas em colunas)

Seu código ficaria assim:
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;

Consulte SQL Fiddle with Demo