Om du tittar på din kod (och zoomar in):
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'
);
du kommer att se den _
och ,
är svarta, medan de ska vara röda som en del av snöret. Det betyder att din sträng är "trasig" där. Så du måste undkomma de enskilda citattecken med ''
:
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'
);
Eller använd dubbla citattecken för strängar som innehåller enkla citattecken:
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 är hela strängen röd som den ska vara :-)
http://rextester.com/SLMU41976