Después de consultar con expertos en la materia, programadores de deferentes áreas y maestros hemos dado con la solución a la pregunta y la dejamos plasmada en este post.
Solución:
No tengo una instancia 11g disponible hoy, pero no podría usar:
SELECT group_id,
LISTAGG(name, ',') WITHIN GROUP (ORDER BY name) AS names
FROM (
SELECT UNIQUE
group_id,
name
FROM demotable
)
GROUP BY group_id
Respuesta súper simple: ¡resuelta!
mi respuesta completa aquí ahora está integrada en algunas versiones de Oracle.
select group_id,
regexp_replace(
listagg(name, ',') within group (order by name)
,'([^,]+)(,1)*(,|$)', '13')
from demotable
group by group_id;
Esto solo funciona si especifica el delimitador como ‘,’ no ‘,’ es decir, solo funciona sin espacios después de la coma. Si desea espacios después de la coma, aquí hay un ejemplo de cómo hacerlo.
select
replace(
regexp_replace(
regexp_replace('BBall, BBall, BBall, Football, Ice Hockey ',',s*',',')
,'([^,]+)(,1)*(,|$)', '13')
,',',', ')
from dual
da Pelota, Fútbol, Hockey sobre hielo
create table demotable(group_id number, name varchar2(100));
insert into demotable values(1,'David');
insert into demotable values(1,'John');
insert into demotable values(1,'Alan');
insert into demotable values(1,'David');
insert into demotable values(2,'Julie');
insert into demotable values(2,'Charles');
commit;
select group_id,
(select listagg(column_value, ',') within group (order by column_value) from table(coll_names)) as names
from (
select group_id, collect(distinct name) as coll_names
from demotable
group by group_id
)
GROUP_ID NAMES
1 Alan,David,John
2 Charles,Julie
Comentarios y puntuaciones
Nos puedes estimular nuestra labor poniendo un comentario o dejando una puntuación te damos la bienvenida.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)