Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como usar GROUP_CONCAT em um CONCAT no 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;

Você pode vê-lo implementado aqui:Sql Fiddle Demo . Exatamente o que você precisa.

Atualizar Divisão em duas etapas. Primeiro, obtemos uma tabela com todos os valores (separados por vírgula) contra um único [Nome, id]. Então, da tabela obtida, obtemos todos os nomes e valores como um único valor em relação a cada id exclusivo. Veja isso explicado aqui Demonstração do SQL Fiddle (role para baixo, pois tem dois conjuntos de resultados)

Editar Houve um erro na leitura da pergunta, eu havia agrupado apenas por id. Mas dois group_contacts são necessários se (os valores devem ser concatenados agrupados por Nome e id e depois por id). A resposta anterior era
select 
id,group_concat(concat(`name`,':',`value`) separator ',')
as Result from mytbl group by id

Você pode vê-lo implementado aqui:SQL Fiddle Demo