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

Có cách nào để xoay các hàng thành cột trong MySQL mà không cần sử dụng CASE không?

Liên kết mà Kangkan cung cấp sẽ chỉ cho bạn cách thực hiện điều này nếu bạn đã biết trước tên các cột. Chúng ta sẽ theo cùng một logic, ngoại trừ việc sử dụng SQL động để xây dựng câu lệnh. Có 2 phần cho mỗi trường mà bạn cần bao gồm, trường trong câu lệnh select và một phép nối thích hợp để nhận giá trị ... vì vậy chúng ta sẽ cần xây dựng câu lệnh thành hai phần

Đầu tiên hãy khai báo 3 biến để xây dựng điều này ... Tôi sẽ sử dụng @select, @join và @sql cho ví dụ này. Cung cấp cho các biến các giá trị ban đầu

 set @select = 'select user_id,'
 set @join = 'from table t'

bây giờ khai báo và tải một con trỏ với các giá trị riêng biệt trong trường table.key. Tôi sẽ sử dụng @field khi biến được điền vào trường table.key riêng biệt. Sau đó lặp qua nó, xây dựng hai biến:

 set @select = @select + ', ' + @field + '.value as '[email protected]+'
 set @join = @join + ' left join table ' + @field + 'on '[email protected]+'.key = t.key and and '[email protected]+'.user_id = t.user_id

(phép nối được thiết kế để sử dụng giá trị trong @field làm bí danh của bảng)

lặp qua con trỏ của bạn để tạo ra @select và @join. Ở cuối vòng lặp:

set @sql = @select + @join + 'where clause if you want'
exec @sql

SQL động được xây dựng như thế này có thể là một khó khăn tuyệt đối để xử lý sự cố (và đi đúng hướng) và mở ra các vấn đề bảo mật ... nhưng đó là cách duy nhất tôi có thể thấy điều này được hoàn thành. Để ý các giới hạn về kích thước đối với các biến của bạn .... nếu bạn có quá nhiều Khóa riêng biệt ở đó, các biến sẽ phát triển quá lớn. Xin lỗi, tôi không thể chính xác hơn với giả về điều này ... bạn sẽ thấy việc xây dựng sql động trong sql là một công việc khó khăn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách giải quyết lỗi MySQL max_user_connections

  2. Sử dụng các ứng dụng khách MySQL

  3. Bảng MySQL InnoDB bị hỏng - làm thế nào để khắc phục?

  4. Bắt đầu nhanh di chuyển cơ sở dữ liệu bằng Talend

  5. GROUP_CONCAT ORDER THEO