Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Pilih Kolom dinamis di mysql

Sayangnya MySQL tidak memiliki PIVOT fungsi yang pada dasarnya adalah apa yang Anda coba lakukan. Jadi, Anda perlu menggunakan fungsi agregat dengan CASE pernyataan:

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

Lihat SQL Fiddle dengan Demo

Sekarang jika Anda ingin melakukan ini secara dinamis, artinya Anda tidak tahu sebelumnya kolom yang akan ditranspose, maka Anda harus meninjau artikel berikut:

Tabel pivot dinamis (mengubah baris menjadi kolom)

Kode Anda akan terlihat seperti ini:

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;

Lihat SQL Fiddle dengan Demo




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cari semua kemunculan string dalam database mysql

  2. Mendapatkan grup berdasarkan jumlah dan jumlah total dalam satu kueri

  3. meniru substring_index() MySQL di PGSQL

  4. Bagaimana tabel innodb dikunci saat pemicu ON INSERT diproses?

  5. Cara SELECT berdasarkan nilai SELECT lainnya