En Oracle, podemos usar LISTAGG()
función para convertir los resultados de nuestra consulta en una lista separada por comas.
Entonces, en lugar de que cada valor se emita en una fila separada, todos los valores se generan en una sola fila, separados por una coma (o algún otro delimitador de nuestra elección).
Ejemplo
Imagina que ejecutamos la siguiente consulta:
SELECT last_name
FROM employees
WHERE job_id = 'IT_PROG';
Resultado:
LAST_NAME ____________ Hunold Ernst Austin Pataballa Lorentz
Esa consulta devolvió cinco filas, cada una con un valor diferente.
Si queremos que esos valores se muestren en una sola fila, podemos hacer lo siguiente:
SELECT LISTAGG(last_name, ', ')
FROM employees
WHERE job_id = 'IT_PROG';
Resultado:
LISTAGG(LAST_NAME,',') ____________________________________________ Hunold, Ernst, Austin, Pataballa, Lorentz
Todo lo que hicimos fue pasar el nombre de la columna a LISTAGG()
función, así como nuestro delimitador elegido.
Podemos usar un delimitador diferente o podemos omitir ese argumento por completo para que todos los elementos estén concatenados.
La función también acepta un DISTINCT
cláusula (para eliminar valores duplicados), y un ORDER BY
cláusula (para ordenar la salida de la función).
La función también puede ser muy útil al agrupar los resultados de una consulta.
Ver LISTAGG()
Función en Oracle para más ejemplos.