Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment utiliser GROUP_CONCAT dans un CONCAT dans MySQL

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