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

mysql pilih nilai baris dinamis sebagai nama kolom, kolom lain sebagai nilai

Tidak seperti beberapa RDBMS lainnya, MySQL tidak memiliki dukungan asli untuk operasi pivoting semacam ini berdasarkan desain (pengembang merasa itu lebih cocok untuk presentasi, daripada database, lapisan aplikasi Anda).

Jika Anda benar-benar harus melakukan manipulasi seperti itu di dalam MySQL, membuat pernyataan yang sudah disiapkan adalah cara yang harus dilakukan—walaupun daripada bermain-main dengan CASE , saya mungkin hanya akan menggunakan GROUP_CONCAT() fungsi:

SELECT CONCAT(
  'SELECT `table`.id', GROUP_CONCAT('
     ,    `t_', REPLACE(name, '`', '``'), '`.value
         AS `', REPLACE(name, '`', '``'), '`'
     SEPARATOR ''),
 ' FROM `table` ', GROUP_CONCAT('
     LEFT JOIN `table`   AS `t_', REPLACE(name, '`', '``'), '`
            ON `table`.id = `t_', REPLACE(name, '`', '``'), '`.id
           AND `t_', REPLACE(name, '`', '``'), '`.name = ', QUOTE(name)
     SEPARATOR ''),
 ' GROUP BY `table`.id'
) INTO @qry FROM (SELECT DISTINCT name FROM `table`) t;

PREPARE stmt FROM @qry;
EXECUTE stmt;

Lihat di sqlfiddle .

Perhatikan bahwa hasil dari GROUP_CONCAT() dibatasi oleh group_concat_max_len variabel (default 1024 byte:tidak mungkin relevan di sini kecuali Anda memiliki name yang sangat panjang nilai).




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

  2. permata mysql2 dikompilasi untuk perpustakaan klien mysql yang salah

  3. Memotong semua tabel dalam database MySQL dalam satu perintah?

  4. Cara Menghitung Median di MySQL

  5. Bagaimana cara mengeksekusi PHP yang disimpan dalam database MySQL?