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

Tampilan Tab Silang di mySQL?

Jenis transformasi data ini disebut PIVOT. MySQL tidak memiliki fungsi pivot tetapi Anda dapat menggunakan fungsi agregat dengan CASE ekspresi untuk mendapatkan hasilnya.

Jika nama clients diketahui sebelumnya, maka Anda dapat membuat hard-code kueri:

select s.playdate,
  sum(case when clname = 'Chris' then score end) Chris,
  sum(case when clname = 'Gale' then score end) Gale,
  sum(case when clname = 'Donna' then score end) Donna
from clients c
inner join scores s
  on c.clid = s.clid
group by s.playdate;

Lihat SQL Fiddle dengan Demo .

Jika Anda memiliki jumlah klien yang tidak diketahui atau Anda akan menambahkan klien baru yang ingin Anda sertakan tanpa harus mengubah kode, maka Anda dapat menggunakan pernyataan yang disiapkan untuk menghasilkan SQL dinamis:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'sum(CASE WHEN clName = ''',
      clName,
      ''' THEN score else ''-'' END) AS `',
      clName, '`'
    )
  ) INTO @sql
FROM clients;

SET @sql 
  = CONCAT('SELECT s.playdate, ', @sql, ' 
            from clients c
            inner join scores s
              on c.clid = s.clid
            group by s.playdate');

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

Lihat SQL Fiddle dengan Demo . Kedua query akan memberikan hasil yang sama.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Belajar PILIH DARI MANA pernyataan yang disiapkan

  2. Kembalikan hasil acak ( pesan berdasarkan Rand() )

  3. MySQL ON DUPLICATE KEY UPDATE saat memasukkan set hasil dari kueri

  4. Apa tujuan dari character_set_connection?

  5. Mengakses data dari servlet