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;
Puede verlo implementado aquí:Sql Fiddle Demo . Exactamente lo que necesitas.
Actualizar Dividir en dos pasos. Primero obtenemos una tabla que tiene todos los valores (separados por comas) contra un único [Nombre, id]. Luego, de la tabla obtenida, obtenemos todos los nombres y valores como un solo valor para cada ID único. Vea esto explicado aquí Demostración de SQL Fiddle (desplácese hacia abajo ya que tiene dos conjuntos de resultados)
Editar Hubo un error al leer la pregunta, había agrupado solo por id. Pero se necesitan dos group_contacts si (los valores deben concatenarse agrupados por nombre e identificación y luego sobre todo por identificación). La respuesta anterior fue
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Puede verlo implementado aquí:Demostración de SQL Fiddle