Jika Anda melihat kode Anda (dan memperbesar):
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'
);
Anda akan melihat _
dan ,
berwarna hitam, sedangkan seharusnya berwarna merah sebagai bagian dari tali. Itu berarti string Anda "rusak" di sana. Jadi, Anda harus menghindari tanda kutip tunggal dengan ''
:
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'
);
Atau gunakan tanda kutip ganda untuk string yang berisi tanda kutip tunggal:
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"
);
Sekarang string lengkapnya berwarna merah sebagaimana mestinya :-)
http://rextester.com/SLMU41976