Hvis du ser på din kode (og zoomer ind):
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 vil se den _
og ,
er sorte, mens de skal være røde som en del af snoren. Det betyder, at din streng er "brudt" der. Så du skal undslippe de enkelte anførselstegn 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 brug dobbelte anførselstegn for strenge, der indeholder enkelte anførselstegn:
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 er hele strengen rød, som den skal være :-)
http://rextester.com/SLMU41976