Вы можете сделать все это в одном агрегированном запросе, например так:
with
flights (flight, n_flight, origin, destination) as (
select 1111, 1, 'LAX', 'MIA' from dual union all
select 1111, 2, 'MIA', 'SCL' from dual union all
select 1111, 3, 'SCL', 'ARG' from dual union all
select 112, 1, 'LAX', 'ATL' from dual union all
select 112, 2, 'ATL', 'JFK' from dual union all
select 113, 1, 'MIA', 'SEA' from dual union all
select 113, 2, 'SEA', 'PHX' from dual union all
select 113, 3, 'PHX', 'MSP' from dual union all
select 113, 4, 'MSP', 'LIM' from dual
)
select flight
, min(origin) keep (dense_rank first order by n_flight) as origin
, min(destination) keep (dense_rank last order by n_flight) as destination
, listagg(origin, ' - ') within group (order by n_flight) || ' - ' ||
min(destination) keep (dense_rank last order by n_flight) as route
from flights
group by flight
;
FLIGHT ORIGIN DESTINATION ROUTE
---------- ------ ----------- ------------------------------
112 LAX JFK LAX - ATL - JFK
113 MIA LIM MIA - SEA - PHX - MSP - LIM
1111 LAX ARG LAX - MIA - SCL - ARG
Обратите внимание, что я изменил последнюю строку в ваших входных данных; Я предполагаю, что отправителем должен быть пункт назначения предыдущего рейса, у вас нет двух отдельных сегментов (3 и 4), исходящих из одного и того же аэропорта.
Предложение WITH
смущает многих читателей. Это не часть решения; это только для имитации входов. Удалите его и используйте фактические имена таблиц и столбцов в основном запросе, начиная с select flight...