martes, 30 de abril de 2024

[SQL] LISTAGG Function

Sometimes, I'm find needing go group data grouping by a line. For example, how get and export all user emails. Normally, we have 1-1 relation a database table, but we want export grouping un a unique line by user. I'm sure, we could export to a excel and pivot in a table, or with other tool. But, how to do it in SQL?

The solution lies in the LISTAGG function, which groups all rows results into a single colum.

The sintax is the next:

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

        

Consequently, in the previous example, we could achieve this with the following 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;

Return the nex ouptut:


In next posts we are looking how export in XML, JSON, etc. format.

Kind regards and good code!


[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!