Als je naar je code kijkt (en inzoomt):
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'
);
je zult zien dat _
en ,
zijn zwart, terwijl ze rood moeten zijn als onderdeel van de string. Dat betekent dat je string daar "gebroken" is. U moet dus de enkele aanhalingstekens escapen met ''
:
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'
);
Of gebruik dubbele aanhalingstekens voor strings die enkele aanhalingstekens bevatten:
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"
);
Nu is de hele string rood zoals het hoort :-)
http://rextester.com/SLMU41976