select id, group_concat(`Name` separator ',') as `ColumnName`
from
(
select
id,
concat(`Name`, ':', group_concat(`Value` separator ',')) as `Name`
from mytbl
group by
id,
`Name`
) tbl
group by id;
Você pode vê-lo implementado aqui:Sql Fiddle Demo . Exatamente o que você precisa.
Atualizar Divisão em duas etapas. Primeiro, obtemos uma tabela com todos os valores (separados por vírgula) contra um único [Nome, id]. Então, da tabela obtida, obtemos todos os nomes e valores como um único valor em relação a cada id exclusivo. Veja isso explicado aqui Demonstração do SQL Fiddle (role para baixo, pois tem dois conjuntos de resultados)
Editar Houve um erro na leitura da pergunta, eu havia agrupado apenas por id. Mas dois group_contacts são necessários se (os valores devem ser concatenados agrupados por Nome e id e depois por id). A resposta anterior era
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Você pode vê-lo implementado aqui:SQL Fiddle Demo