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

Permintaan tabel pivot MySQL dengan kolom dinamis yang memotong nilai kunci

Ada beberapa masalah dengan kode Anda - dengan mengurangi gravitasi:

  • Anda harus memilih from z_tmp_admin_system_settings , bukan from name
  • kolom untuk mengelompokkan disebut category , bukan subdomain
  • karena prinsip kueri adalah menggunakan agregasi, Anda memerlukan fungsi agregat untuk kolom yang dihasilkan, seperti MAX(); versi lama MySQL mentolerir tidak menggunakan fungsi agregat pada kolom non-agregat, tapi itu bukan sesuatu yang biasa
  • merupakan praktik yang baik untuk mengapit nama kolom dengan backtick, jika salah satu nama bentrok dengan kata yang dicadangkan (ini tidak terjadi pada data sampel Anda, tetapi mungkin tidak komprehensif)
  • DISTINCT mungkin tidak diperlukan, kecuali Anda telah menduplikasi name s per kategori (dalam hal ini, silakan tambahkan kembali ke kode di bawah ini)
  • Catatan tambahan:IFNULL(..., NULL) adalah larangan

Kode:

SET SESSION group_concat_max_len = 100000;
SET @sql = '';

SELECT GROUP_CONCAT(
    CONCAT('MAX(IF(z_tmp_admin_system_settings.name = ''', name, ''', value, NULL)) AS `', name, '`')
)
INTO @sql
FROM z_tmp_admin_system_settings;
SET @sql = CONCAT(
    'SELECT category, ', 
    @sql, 
    ' FROM z_tmp_admin_system_settings GROUP BY category'
);

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

Demo di DB Fiddle :

| category | 2fa | abc_processing_date | activate_new_approve_person | activate_new_schdule | additional_footer_for_person |
| -------- | --- | ------------------- | --------------------------- | -------------------- | ---------------------------- |
| acme     | 0   | today               | 1                           | 1                    |                              |


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL bekerja dengan 127.0.0.1 tetapi tidak bekerja dengan localhost?

  2. Hitungan pemilihan postgresl (*) memakan waktu

  3. Apakah mungkin untuk menanamkan server database MySQL ke dalam servlet Java?

  4. Tidak dapat mengembalikan hasil dari prosedur tersimpan menggunakan kursor Python

  5. Laravel 5.1 - Memeriksa Koneksi Database