sql >> Base de Datos >  >> RDS >> Mysql

Cómo usar GROUP_CONCAT en un CONCAT en 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;

Puede verlo implementado aquí:Sql Fiddle Demo . Exactamente lo que necesitas.

Actualizar Dividir en dos pasos. Primero obtenemos una tabla que tiene todos los valores (separados por comas) contra un único [Nombre, id]. Luego, de la tabla obtenida, obtenemos todos los nombres y valores como un solo valor para cada ID único. Vea esto explicado aquí Demostración de SQL Fiddle (desplácese hacia abajo ya que tiene dos conjuntos de resultados)

Editar Hubo un error al leer la pregunta, había agrupado solo por id. Pero se necesitan dos group_contacts si (los valores deben concatenarse agrupados por nombre e identificación y luego sobre todo por identificación). La respuesta anterior fue

select 
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id

Puede verlo implementado aquí:Demostración de SQL Fiddle