varios una sola resultados registros listagg filas ejemplo convertir consulta concatenar columnas columna cadena sql oracle concatenation grouping group-concat

sql - una - Concatenar y agrupar varias filas en Oracle



convertir filas en columnas oracle (1)

Considere usar la función LISTAGG en caso de que tenga 11g:

select grp, listagg(name,'','') within group( order by name ) from name_table group by grp

sqlFiddle

upd: en caso de que no lo estés, considera usar analíticas:

select grp, ltrim(max(sys_connect_by_path (name, '','' )), '','') scbp from (select name, grp, row_number() over (partition by grp order by name) rn from tab ) start with rn = 1 connect by prior rn = rn-1 and prior grp = grp group by grp order by grp

sqlFiddle

Posible duplicado:
cómo recuperar datos de dos columnas en formato A, B en Oracle

Supongamos que tengo una tabla como esta:

NAME GROUP_NAME name1 groupA name2 groupB name5 groupC name4 groupA name3 groupC

Me gustaría tener un resultado como este:

GROUP_NAME NAMES groupA name1,name4 groupB name2 groupC name3,name5

Si solo hubiera una columna en la tabla, podría concatenar los registros haciendo lo siguiente, pero con la agrupación en el contexto, realmente no tengo mucha idea.

Concatenar una tabla de columnas:

SELECT names FROM (SELECT SYS_CONNECT_BY_PATH(names,'' '') names, level FROM name_table START WITH names = (SELECT names FROM name_table WHERE rownum = 1) CONNECT BY PRIOR names < names ORDER BY level DESC) WHERE rownum = 1

Actualizado:

Ahora tengo una solución usando LISTAGG :

SELECT group_name, LISTAGG(name, '', '') WITHIN GROUP (ORDER BY GROUP) "names" FROM name_table GROUP BY group_name

Todavía está interesado en una solución más "general" para los casos en que LISTAGG no está disponible.