Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql chọn giá trị hàng động làm tên cột, một cột khác làm giá trị

Không giống như một số RDBMS khác, MySQL không có hỗ trợ riêng cho các hoạt động xoay vòng loại này theo thiết kế (các nhà phát triển cảm thấy nó phù hợp với bản trình bày hơn là cơ sở dữ liệu, lớp ứng dụng của bạn).

Nếu bạn hoàn toàn phải thực hiện các thao tác như vậy trong MySQL, thì việc xây dựng một câu lệnh chuẩn bị là cách tốt nhất để đi — mặc dù thay vì làm rối tung CASE , Tôi có thể chỉ sử dụng GROUP_CONCAT() chức năng:

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;

Xem nó trên sqlfiddle .

Lưu ý rằng kết quả của GROUP_CONCAT() bị giới hạn bởi group_concat_max_len biến (mặc định là 1024 byte:không có liên quan ở đây trừ khi bạn có một số name cực kỳ dài giá trị).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ví dụ về LOCALTIMESTAMP - MySQL

  2. Làm cách nào để CHỌN các hàng có MAX (Giá trị cột), PHẦN CỦA một cột khác trong MYSQL?

  3. Nhập csv vào mysql qua dòng lệnh

  4. Hàm MySQL ASIN () - Trả về Arc Sine của một số

  5. MySQL, tốt hơn để chèn NULL hoặc chuỗi trống?