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

menggabungkan baris tabel menjadi kolom dengan judul kolom dari baris asli

Saya baru saja menggunakan GROUP_CONCAT() alih-alih kursor untuk menghasilkan pernyataan yang disiapkan:

SELECT CONCAT(
 ' SELECT MDE_ID,'

,  GROUP_CONCAT(
     't', MDF_ID, '.MFV_Value AS `', REPLACE(MDF_Label, '`', '``'), '`'
   )

,' FROM ModuleEntries '

, GROUP_CONCAT(
    'LEFT JOIN ModuleEntryFieldValues AS t', MDF_ID, '
       ON t', MDF_ID, '.MFV_MDE_ID = ModuleEntries.MDE_ID
      AND t', MDF_ID, '.MFV_MDF_ID = ', MDF_ID
  SEPARATOR ' ')

) INTO @qry FROM ModuleFields;

Simpan untuk pengeditan spasi agar lebih mudah dibaca, dengan data sampel Anda @qry maka akan berisi:

SELECT MDE_ID,
       t1.MFV_Value AS `Height`,
       t2.MFV_Value AS `Width`,
       t3.MFV_Value AS `Weight`
FROM   ModuleEntries
  LEFT JOIN ModuleEntryFieldValues AS t1
         ON t1.MFV_MDE_ID = ModuleEntries.MDE_ID AND t1.MFV_MDF_ID = 1
  LEFT JOIN ModuleEntryFieldValues AS t2
         ON t2.MFV_MDE_ID = ModuleEntries.MDE_ID AND t2.MFV_MDF_ID = 2
  LEFT JOIN ModuleEntryFieldValues AS t3
         ON t3.MFV_MDE_ID = ModuleEntries.MDE_ID AND t3.MFV_MDF_ID = 3

Seseorang kemudian dapat menyiapkan dan menjalankan pernyataan itu:

PREPARE stmt FROM @qry;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET @qry = NULL;

Yang menghasilkan hasil berikut:

MDE_ID    Height    Width    Weight
     1    120cms    30cms    (null)

Lihat di sqlfiddle .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah MySQL Regexp mendukung pencocokan Unicode?

  2. Mesin penyimpanan untuk meja tidak mendukung perbaikan. InnoDB atau MyISAM?

  3. Injeksi SQL, Kutipan, dan PHP

  4. Bagaimana cara memperbaiki simbol eksternal yang tidak terselesaikan karena Konektor MySql C++?

  5. Menggunakan Pernyataan yang Disiapkan dalam C# dengan Mysql