Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wybierz dynamiczne kolumny w mysql

Niestety MySQL nie ma PIVOT funkcja, która jest w zasadzie tym, co próbujesz zrobić. Musisz więc użyć funkcji agregującej z CASE oświadczenie:

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

Zobacz SQL Fiddle z wersją demonstracyjną

Teraz, jeśli chcesz wykonać to dynamicznie, co oznacza, że ​​nie znasz z wyprzedzeniem kolumn do transpozycji, zapoznaj się z następującym artykułem:

Dynamiczne tabele przestawne (przekształcanie wierszy w kolumny)

Twój kod będzie wyglądał tak:

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;

Zobacz Skrzypce SQL z wersją demonstracyjną




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql:jak skrócić długość pola

  2. Struktura folderów do przechowywania milionów obrazów?

  3. wielokrotne zapytanie mySQL - zwraca błąd mysql_fetch_array

  4. SELECT INTO Zmienna w MySQL DECLARE powoduje błąd składni?

  5. Jak zdefiniować połączenie mysqli w jednym pliku php, a następnie użyć go w innym pliku?