不幸的是,MySQL没有
PIVOT您基本上想做的功能。因此,您将需要在
CASE语句中使用聚合函数:
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) ageFROM resultsgroup by type
参见带有演示的SQL Fiddle
现在,如果您要动态执行此操作,这意味着您不知道要转置的列的提前时间,那么您应该查看以下文章:
动态数据透视表(将行转换为列)
您的代码如下所示:
SET @sql = NULL;SELECt GROUP_CONCAt(DISTINCT CONCAt( 'SUM(IF(CRITERIA_ID = ''', CRITERIA_ID, ''', RESULT, NULL)) AS ', CRITERIA_ID ) ) INTO @sqlFROM Results;SET @sql = CONCAt('SELECt type, ', @sql, ' FROM Results GROUP BY type');PREPARE stmt FROM @sql;EXECUTE stmt;DEALLOCATE PREPARE stmt;参见带有演示的SQL Fiddle



