sql >> Database >  >> RDS >> Mysql

Selecteer dynamische kolommen in mysql

Helaas heeft MySQL geen PIVOT functie die eigenlijk is wat u probeert te doen. U moet dus een aggregatiefunctie gebruiken met een CASE verklaring:

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

Zie SQL Fiddle met demo

Als u dit nu dynamisch wilt uitvoeren, wat betekent dat u niet van tevoren weet welke kolommen u moet transponeren, moet u het volgende artikel lezen:

Dynamische draaitabellen (transformeer rijen naar kolommen)

Uw code ziet er als volgt uit:

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;

Zie SQL Fiddle met demo




  1. Parallelle transacties in mysql

  2. MySQL waar NIET IN naam array?

  3. Oracle-verbindingspoolklasse

  4. Hoe LIMIT implementeren met SQL Server?