GROUP_CONCATエントリの数がわかっている場合(つまり、ID =1の場合は3つのフィールドが結合され、2などの場合は2つのフィールドが結合されます)、汚い方法があります。
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;
出力:
ID CODE1 CODE2 CODE3
1 A B C
2 D (null) E
3 F G H
上記のクエリは、3つのフィールドをGROUP_CONCATしていることを前提としています。クエリを動的に生成している場合は、試してみることができます。 SQLFIDDLE
編集: 注:コードは行ごとに異なる場合があります。(これを無視します)