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
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
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.