Jeśli spojrzysz na swój kod (i powiększysz):
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'
);
zobaczysz, że _
i ,
są czarne, podczas gdy powinny być czerwone jako część sznurka. Oznacza to, że twój sznurek jest tam „zerwany”. Musisz więc zmienić pojedyncze cudzysłowy za pomocą ''
:
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'
);
Lub użyj podwójnych cudzysłowów dla ciągów zawierających pojedyncze cudzysłowy:
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"
);
Teraz cały ciąg jest czerwony, tak jak powinien być :-)
http://rextester.com/SLMU41976