La versión 19c de la base de datos Oracle incluye una interesante mejora a la función LISTAGG, largamente solicitada y esperado por los desarrolladores.
La versión 12.2 ya introdujo algunas mejoras realmente interesantes, las cuales ya compartí en este articulo Oracle 12c R2 - LISTAGG y OVERFLOW.
Ahora es posible eliminar los valores repetidos utilizando la opción DISTINCT. Veamos el siguiente ejemplo (tomado del blog de Connor McDonald):
SELECT deptno,
listagg(job,',') WITHIN GROUP ( ORDER BY job) AS jobs
FROM scott.emp
GROUP BY deptno
ORDER BY 1;
DEPTNO JOBS
--------- --------------------------------------------------
10 CLERK,MANAGER,PRESIDENT
20 ANALYST,ANALYST,CLERK,CLERK,MANAGER
30 CLERK,MANAGER,SALESMAN,SALESMAN,SALESMAN,SALESMAN
Ahora es muy sencillo eliminar los valores duplicados simplemente utilizando la opción DISTINCT:
SELECT deptno,
listagg(distinct job,',') WITHIN GROUP ( ORDER BY job) AS jobs
FROM scott.emp
GROUP BY deptno
ORDER BY 1;
DEPTNO JOBS
--------- --------------------------------------------------
10 CLERK,MANAGER,PRESIDENT
20 ANALYST,CLERK,MANAGER
30 CLERK,MANAGER,SALESMAN
También es útil revisar la sintaxis completa de la función LISTAGG en la documentación de Oracle 19c.
No hay comentarios.:
Publicar un comentario