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;
Du kan se det implementerat här :Sql Fiddle Demo . Exakt vad du behöver.
Uppdatera Uppdelning i två steg. Först får vi en tabell med alla värden (kommaseparerade) mot ett unikt[Namn,id]. Sedan får vi från den erhållna tabellen alla namn och värden som ett enda värde mot varje unikt ID. Se detta förklarat här SQL Fiddle Demo (rulla ner eftersom den har två resultatuppsättningar)
Redigera Det var ett misstag när jag läste frågan, jag hade bara grupperat efter id. Men två group_contacts behövs om (Värden ska sammanfogas grupperade efter namn och id och sedan över allt efter id). Föregående svar var
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Du kan se det implementerat här :SQL Fiddle Demo