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;
Możesz zobaczyć to zaimplementowane tutaj:Sql Fiddle Demo . Dokładnie to, czego potrzebujesz.
Aktualizacja Dzielenie w dwóch krokach. Najpierw otrzymujemy tabelę zawierającą wszystkie wartości (oddzielone przecinkami) względem unikalnego[Nazwa,id]. Następnie z otrzymanej tabeli otrzymujemy wszystkie nazwy i wartości jako pojedynczą wartość dla każdego unikalnego identyfikatora. Zobacz to wyjaśnione tutaj Pokaz SQL Fiddle (przewiń w dół, ponieważ ma dwa zestawy wyników)
Edytuj Wystąpił błąd w czytaniu pytania, pogrupowałem tylko według id. Ale dwa group_contacts są potrzebne, jeśli (wartości mają być połączone pogrupowane według nazwy i identyfikatora, a następnie nad wszystkim według identyfikatora). Poprzednia odpowiedź to
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Możesz zobaczyć to zaimplementowane tutaj:Demo SQL Fiddle