Saltar al contenido

¿Cómo usar la función LISTAGG de Oracle con un filtro único?

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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *