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.