martes, 30 de abril de 2024

[SQL] Función LISTAGG

 Hola JDEFriends,

En ocasiones me he encontrado con la necesidad de obtener datos agrupando en una línea. Por ejemplo, cómo obtener y exportar todos los emails de un usuario. Normalmente, para ello tenemos relación 1-1 en una tabla en base de datos, pero queremos exportar agrupado en una única línea por usuario. Seguramente podamos exportarlo a un excel y pivotarlo en una tabla o con otra herramienta ¿Cómo hacemos esto en SQL?

La solución está en la función LISTAGG, la cual agrupa en una única columna todos los resultados de las filas.

La sintaxis es la siguiente:

        
           
SELECT LISTAGG(column_name, delimiter) WITHIN GROUP (ORDER BY ordering_column)
FROM table_name

        

Por lo cual, en el ejemplo anterior podríamos realizarlo con la siguiente query:

SELECT EAAN8, ABALPH, LISTAGG(TRIM(EAEMAL), ',') WITHIN GROUP (ORDER BY EAEMAL) AS EMAILS FROM F01151 JOIN F0101 ON EAAN8=ABAN8 WHERE EAETP = 'E' GROUP BY EAAN8, ABALPH;

Con la siguiente salida:


En otro posts veremos cómo exportar en formato XML, JSON, etc.

Saludos y buen código!


No hay comentarios:

Publicar un comentario