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

konversi baris ke kolom di mysql

Jenis transformasi data ini dikenal sebagai poros . MySQL tidak memiliki fungsi pivot, jadi Anda ingin mengubah data menggunakan fungsi agregat dengan CASE ekspresi.

Jika Anda mengetahui nilai sebelumnya untuk diubah, Anda dapat membuat hard-code seperti ini:

select studentid,
  sum(case when subject = 'Java' then mark else 0 end) Java,
  sum(case when subject = 'C#' then mark else 0 end) `C#`,
  sum(case when subject = 'JavaScript' then mark else 0 end) JavaScript
from yourtable
group by studentid

Lihat SQL Fiddle dengan Demo .

Jika nilai subjek tidak diketahui atau fleksibel, maka Anda mungkin ingin menggunakan pernyataan yang disiapkan untuk menghasilkan sql dinamis:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(case when subject = ''',
      subject,
      ''' then mark else 0 end) AS `',
      subject, '`'
    )
  ) INTO @sql
FROM  yourtable;

SET @sql = CONCAT('SELECT studentid, ', @sql, ' 
                  from yourtable
                  group by studentid');

PREPARE stmt FROM @sql;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

Lihat SQL Fiddle dengan Demo .

Hasil dari kedua query tersebut adalah:

| STUDENTID | JAVA | C# | JAVASCRIPT |
--------------------------------------
|        10 |   46 | 65 |         79 |
|        11 |   66 | 85 |         99 |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Alternatif untuk menggunakan kata kunci LIMIT dalam SubQuery di MYSQL

  2. Cara mendapatkan data tabel gabungan menggunakan metode query()

  3. MySQL memperbarui baris yang sama oleh banyak pengguna seperti penghitung

  4. Mengapa MySQL tidak menggunakan salah satu dari kemungkinan kunci ini?

  5. PDOException "tidak dapat menemukan driver"