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;
Vous pouvez le voir mis en œuvre ici : Sql Fiddle Demo . Exactement ce dont vous avez besoin.
Mise à jour Fractionnement en deux étapes. D'abord nous obtenons une table ayant toutes les valeurs (séparées par des virgules) contre un unique [Name,id]. Ensuite, à partir de la table obtenue, nous obtenons tous les noms et toutes les valeurs comme une seule valeur pour chaque identifiant unique. Voir l'explication ici Démonstration de SQL Fiddle (faire défiler vers le bas car il y a deux ensembles de résultats)
Modifier Il y a eu une erreur dans la lecture de la question, j'avais regroupé uniquement par id. Mais deux group_contacts sont nécessaires si (les valeurs doivent être concaténées en les groupant par Nom et par Id et ensuite par Id). La réponse précédente était
select
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id
Vous pouvez le voir mis en œuvre ici : Démonstration de SQL Fiddle