Mysql
 sql >> база данни >  >> RDS >> Mysql

Изберете динамични колони в mysql

За съжаление 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) age
FROM results
group by type

Вижте SQL Fiddle с демонстрация

Сега, ако искате да извършите това динамично, което означава, че не знаете предварително колоните за транспониране, тогава трябва да прегледате следната статия:

Динамични централни таблици (трансформиране на редове в колони)

Вашият код ще изглежда така:

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;

Вижте SQL Fiddle с демонстрация




  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 INSERT ... ПРИ АКТУАЛИЗИРАНЕ НА ДУБЛИРАН КЛЮЧ с django 1.4 за групово вмъкване

  2. Как да попълним gridview с mysql?

  3. Показване на сумата в долната част на колоната в mysql

  4. Изберете от таблицата на mysql WHERE field='$array'?

  5. Искам да добавя 30 дни към реда за дата на mysql