Mysql
 sql >> Database >  >> RDS >> Mysql

Come utilizzare GROUP_CONCAT in un CONCAT in 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;

Puoi vederlo implementato qui :Sql Fiddle Demo . Esattamente quello che ti serve.

Aggiorna Dividere in due passaggi. Per prima cosa otteniamo una tabella con tutti i valori (separati da virgole) rispetto a un unico [Nome, ID]. Quindi dalla tabella ottenuta otteniamo tutti i nomi e i valori come un unico valore rispetto a ciascun ID univoco. Vedi questo spiegato qui Dimostrazione di SQL Fiddle (scorri verso il basso perché ha due set di risultati)

Modifica C'è stato un errore nella lettura della domanda, avevo raggruppato solo per id. Ma sono necessari due contatti_di gruppo se (i valori devono essere concatenati raggruppati per nome e id e poi tutto per id). La risposta precedente era

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

Puoi vederlo implementato qui:SQL Fiddle Demo