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

MySQL Tham gia nhiều hàng dưới dạng cột

INNER JOIN sẽ đáp ứng đủ nhu cầu của bạn. MySQL không có PIVOT bởi bạn vẫn có thể mô phỏng nó bằng cách sử dụng CASEMAX() chức năng.

SELECT  a.ID, a.NAME,
        MAX(CASE WHEN b.Race_Number = 1 THEN b.Place ELSE NULL END) Race1,
        MAX(CASE WHEN b.Race_Number = 2 THEN b.Place ELSE NULL END) Race2,
        MAX(CASE WHEN b.Race_Number = 3 THEN b.Place ELSE NULL END) Race3
FROM    Table1 a
        INNER JOIN Table2 b
            ON a.ID = b.ID
GROUP   BY a.ID, a.Name

Nhưng nếu bạn có số RACE không xác định , sau đó là DYNAMIC SQL được ưu tiên hơn nhiều.

SET @sql = NULL;
SELECT
    GROUP_CONCAT(DISTINCT
    CONCAT('MAX(CASE WHEN b.Race_Number = ', Race_Number,
      ' THEN b.Place END) AS ', CONCAT('`Race', Race_Number, '`'))
    ) INTO @sql
FROM Table2;

SET @sql = CONCAT('SELECT s.Student_name, ', @sql, ' 
                   FROM Table1 a
                   LEFT JOIN Table2 b 
                        ON ON a.ID = b.ID
                   GROUP   BY a.ID, a.Name');

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



  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ác khóa ngoại không phải chính trong Django

  2. Nhận tất cả các bản ghi từ cơ sở dữ liệu MySQL trong Google Maps .getBounds?

  3. Lỗi 1148 MySQL Lệnh đã sử dụng không được phép với phiên bản MySQL này

  4. Làm thế nào để loại bỏ một phần của chuỗi trong mysql?

  5. Nhiều người thuê PHP SaaS - DB riêng biệt cho từng khách hàng, hay nhóm chúng?