Nếu bạn nhìn vào mã của mình (và phóng to):
SET @sql = CONCAT('SELECT id_c, students,', @sql, '
[..]
CONCAT(B.`code`, '_', A.id_a) col,
CONCAT(D.value_m, ',', D.value_n) val
[..]
GROUP BY id_c'
);
bạn sẽ thấy rằng _
và ,
có màu đen, trong khi chúng phải có màu đỏ như một phần của chuỗi. Điều đó có nghĩa là chuỗi của bạn bị "đứt" ở đó. Vì vậy, bạn cần thoát khỏi các dấu nháy đơn bằng ''
:
SET @sql = CONCAT('SELECT id_c, students,', @sql, '
[..]
CONCAT(B.`code`, ''_'', A.id_a) col,
CONCAT(D.value_m, '','', D.value_n) val
[..]
GROUP BY id_c'
);
Hoặc sử dụng dấu ngoặc kép cho các chuỗi chứa dấu ngoặc kép:
SET @sql = CONCAT('SELECT id_c, students,', @sql, "
[..]
CONCAT(B.`code`, '_', A.id_a) col,
CONCAT(D.value_m, ',', D.value_n) val
[..]
GROUP BY id_c"
);
Bây giờ chuỗi hoàn chỉnh có màu đỏ như nó phải là :-)
http://rextester.com/SLMU41976