Om du vet antalet GROUP_CONCAT-poster (jag menar att 3 fält kombineras i fallet med ID =1 och 2 fält kombineras i fallet med 2 etc), så finns det ett smutsigt sätt.
SELECT ID, SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 1), ',', -1) AS CODE1,
If( length(GROUP_CONCAT(NAME)) - length(replace(GROUP_CONCAT(NAME), ',', ''))>1,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 2), ',', -1) ,NULL)
as CODE2,
SUBSTRING_INDEX(SUBSTRING_INDEX(GROUP_CONCAT(NAME), ',', 3), ',', -1) AS CODE3
FROM test
GROUP BY ID;
Utdata:
ID CODE1 CODE2 CODE3
1 A B C
2 D (null) E
3 F G H
Frågan ovan förutsätter att du GROUP_CONCAT använder tre fält. Om du dynamiskt genererar en fråga kan du prova. SQLFIDDLE
EDIT: Obs! KODEN kan variera för varje RAD.(Ignorerar detta)