Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Nối 2 giá trị cùng cột với điều kiện khác nhau trong MySQL

Sử dụng CASE WHEN trong hàm tổng hợp MAX() để "pivot" hàng thành cột, sau đó CONCAT nối chuỗi.

Ví dụ minh họa

Tạo bảng Subject-Name theo Id:

mysql> CREATE TABLE DemoTable1869 (Id INT, Subject VARCHAR(20), Name VARCHAR(20));
mysql> INSERT INTO DemoTable1869 VALUES(100,'MySQL','John'),(100,'MongoDB','Smith'),(101,'MySQL','Chris'),(101,'MongoDB','Brown');

Nối tên MySQL + MongoDB theo Id:

mysql> SELECT Id, CONCAT(StudentFirstName, '', StudentLastName) FROM (
    SELECT Id,
        MAX(CASE WHEN Subject='MySQL' THEN Name END) AS StudentFirstName,
        MAX(CASE WHEN Subject='MongoDB' THEN Name END) AS StudentLastName
    FROM DemoTable1869 GROUP BY Id
) tbl;

Kết quả:

+------+---------------------------------------------+
| Id   | CONCAT(StudentFirstName, '', StudentLastName) |
+------+---------------------------------------------+
|  100 | JohnSmith                                   |
|  101 | ChrisBrown                                  |
+------+---------------------------------------------+

MySQL 8+: Dùng GROUP_CONCAT(Name ORDER BY Subject SEPARATOR '') đơn giản hơn nếu thứ tự cố định.