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

Cara menghasilkan kueri SQL ini seperti tabel pivot

Anda dapat melakukannya menggunakan CASE pernyataan:

SELECT p.productid, p.da, p.ig, p.des
      ,GROUP_CONCAT(CASE WHEN ck.title = 'St Code' 
                         THEN cv.value ELSE NULL END) AS 'St Code'
      ,GROUP_CONCAT(CASE WHEN ck.title = 'Rear Les' 
                         THEN cv.value ELSE NULL END) AS 'Rear Les'
FROM Products p
JOIN code_values cv ON p.productid = cv.pid
JOIN code_keys ck ON cv.codeid = ck.codeid
GROUP BY p.productid;

Jika Anda memiliki nomor code_keys yang tidak diketahui Anda dapat mencoba kueri dinamis ini:

SET @sql = NULL;
SELECT
  GROUP_CONCAT(DISTINCT
    CONCAT(
      'GROUP_CONCAT(CASE WHEN `title` = ''',
      `title`,
      ''' THEN cv.value ELSE NULL END) AS `',
      `title`, '`'
    )
  ) INTO @sql
FROM code_keys ck JOIN code_values cv ON cv.codeid = ck.codeid;

SET @sql = CONCAT('SELECT p.productid, p.da, p.ig, p.des, ', @sql,'
                     FROM Products p
                     JOIN code_values cv ON p.productid = cv.pid
                     JOIN code_keys ck ON cv.codeid = ck.codeid
                    GROUP BY p.productid
                  ');

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

Keluaran:

| PRODUCTID | DA | IG | DES |      ST CODE |  REAR LES |
--------------------------------------------------------
|         5 | 78 | 33 |  23 | ST 102 200 R | 12 000 33 |
|         8 | 88 | 13 |  21 | ST 100 101 R | 11 223 34 |

Lihat SQLFiddle ini




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. menghitung dan menampilkan tanggal sebagai 'detik yang lalu', 'menit yang lalu', 'jam yang lalu' dll

  2. Bidang integer MySQL dikembalikan sebagai string dalam PHP

  3. Mendeteksi jika nilai LAMA tidak sama dengan nilai BARU dan nilai LAMA adalah NULL

  4. Bagaimana saya bisa mendapatkan jumlah baris 'dikembalikan' dari kumpulan hasil prosedur tersimpan

  5. Masukkan KE MySQL DARI tabel lain