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;
Puoi vederlo implementato qui :Sql Fiddle Demo . Esattamente quello che ti serve.
Aggiorna Dividere in due passaggi. Per prima cosa otteniamo una tabella con tutti i valori (separati da virgole) rispetto a un unico [Nome, ID]. Quindi dalla tabella ottenuta otteniamo tutti i nomi e i valori come un unico valore rispetto a ciascun ID univoco. Vedi questo spiegato qui Dimostrazione di SQL Fiddle (scorri verso il basso perché ha due set di risultati)
Modifica C'è stato un errore nella lettura della domanda, avevo raggruppato solo per id. Ma sono necessari due contatti_di gruppo se (i valori devono essere concatenati raggruppati per nome e id e poi tutto per id). La risposta precedente era
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Puoi vederlo implementato qui:SQL Fiddle Demo