Si vous regardez votre code (et zoomez) :
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'
);
vous verrez que _
et ,
sont noirs, alors qu'ils devraient être rouges dans le cadre de la chaîne. Cela signifie que votre chaîne est "cassé" là. Vous devez donc échapper les guillemets simples avec ''
:
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'
);
Ou utilisez des guillemets doubles pour les chaînes contenant des guillemets simples :
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"
);
Maintenant, la chaîne complète est rouge comme il se doit :-)
http://rextester.com/SLMU41976