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

Tabel Pivot Menggunakan MySQL

Untuk memutar data di MySQL, Anda harus menggunakan fungsi agregat dan CASE ekspresi.

Jika Anda memiliki jumlah kolom yang diketahui, Anda dapat membuat hard-code kueri:

select p.postid,
  max(case when t.tagname = 'Incident' then p.value end) Incident,
  max(case when t.tagname = 'Location' then p.value end) Location,
  max(case when t.tagname = 'Weapon' then p.value end) Weapon
from triples p
left join tags t
  on p.tagid = t.id
group by p.postid;

Lihat SQL Fiddle dengan Demo

Tetapi jika Anda memiliki jumlah kolom yang tidak diketahui, maka Anda perlu menggunakan pernyataan yang disiapkan untuk menghasilkan SQL dinamis:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'max(CASE WHEN TagName = ''',
      TagName,
      ''' THEN p.value END) AS `',
      TagName, '`'
    )
  ) INTO @sql
FROM tags;


SET @sql 
  = CONCAT('SELECT p.postid, ', @sql, ' 
           from triples p
           left join tags t
             on p.tagid = t.id
           group by p.postid');

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

Lihat SQL Fiddle dengan Demo .

Keduanya akan memberikan hasil:

| POSTID | INCIDENT |      LOCATION | WEAPON |
----------------------------------------------
|      1 |   Murder | New Brunswick | (null) |
|      2 |    Theft |        (null) |    Gun |



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Database Salin MySQL

  2. PILIH semua catatan yang berumur 30 hari

  3. BATAS offset atau OFFSET dalam kueri SQL UPDATE

  4. Bagaimana cara menyimpan Karakter Emoji di Database MySQL

  5. Apakah MySQL InnoDB selalu memerlukan indeks untuk setiap batasan kunci asing?