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 implémenté ici :Sql Fiddle Demo . Exactement ce dont vous avez besoin.
Mettre à jour Fractionnement en deux étapes. Nous obtenons d'abord 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 valeurs sous la forme d'une valeur unique pour chaque identifiant unique. Démo SQL Fiddle (faites défiler vers le bas car il a deux jeux de résultats)
Modifier Il y a eu une erreur dans la lecture de la question, j'avais regroupé uniquement par identifiant. Mais deux group_contacts sont nécessaires si (les valeurs doivent être concaténées groupées par nom et id puis sur tout 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 implémenté ici :SQL Fiddle Demo