Categorías
Others

Utilice LISTAGG () en varias tablas unidas en Oracle

Puede saber cómo usar LISTAGG () en una sola tabla, pero no sabe cómo usar LISTAGG en varias tablas unidas. Este ejemplo demuestra cómo utilizar la función agregada en varias tablas unidas en Oracle 12g.

Suponiendo que tengamos las siguientes dos tablas.

Tabla «Usuario»

IDENTIFICACIÓN Nombre
111 aaa
222 bbb
333 ccc

Tabla «Record»

IDENTIFICACIÓN Etiqueta Valor
111 comienzo 1
111 medio 2
111 final 3
222 comienzo 1
222 final 2
333 comienzo 1
333 medio 2
333 final 3

Si queremos seleccionar todos los valores etiquetados con «inicio» y «final», como se muestra a continuación, ¿cómo escribir la consulta SQL?

Resultado Esperado:

IDENTIFICACIÓN Nombre AggValues
111 aaa 1,3
222 bbb 1,2
333 ccc 1,3
select u.ID, u.Name, listagg(Value, ', ') within group (order by Tag) as AggValues
from User u 
left outer join Record r
on u.ID = r.ID and r.Tag in ('start', 'end')
group by u.ID, u.Name;

Un error común es que faltan campos en la última cláusula group by. Cada campo de selección debe estar también en la cláusula group by. En este caso, seleccionamos seleccionar ID y Nombre, por lo que ID y Nombre deben usarse para agrupar los resultados.

  小白 Moto G 北美 版 刷 中文 三步走

Por Programación.Click

Más de 20 años programando en diferentes lenguajes de programación. Apasionado del code clean y el terminar lo que se empieza. ¿Programamos de verdad?

Deja una respuesta

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