sql >> Databáze >  >> RDS >> Mysql

Vyberte dynamické sloupce v mysql

Bohužel MySQL nemá PIVOT funkce, což je v podstatě to, o co se snažíte. Takže budete muset použít agregační funkci s CASE prohlášení:

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

Viz SQL Fiddle s ukázkou

Nyní, pokud to chcete provést dynamicky, což znamená, že předem nevíte, které sloupce se mají transponovat, měli byste si přečíst následující článek:

Dynamické kontingenční tabulky (transformace řádků na sloupce)

Váš kód by vypadal takto:

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;

Viz SQL Fiddle s ukázkou




  1. efektivní způsob implementace stránkování

  2. Tabulky, jejichž jediným účelem je určit podmnožinu jiné tabulky

  3. Jak vypočítat tržby v MySQL

  4. ORA-01830:Obrázek formátu data končí před převodem celého vstupního řetězce / Vyberte součet v dotazu na datum