Вот один вариант; строки № 1 - 9 представляют образцы данных (вам не нужно их вводить). Остальное использует подзапрос, который - используя group by
(из-за функции min
) - возвращает различные значения. Row_number
analyti c Функция просто отображает порядковые номера для окончательного результата.
Если вы не хотите переупорядочивать их, подзапрос будет делать (но тогда вы получите порядковые номера 1, 2, 4
для данных выборки).
SQL> with test (flight, rn, origin, destination) as
2 (select 1111, 1, 'LAX', 'MIA' from dual union all
3 select 1111, 2, 'MIA', 'SCL' from dual union all
4 select 1111, 3, 'MIA', 'SCL' from dual union all
5 select 1111, 4, 'SCL', 'ARG' from dual union all
6 select 1111, 5, 'SCL', 'ARG' from dual union all
7 select 1111, 6, 'SCL', 'ARG' from dual union all
8 select 1111, 7, 'SCL', 'ARG' from dual
9 )
10 select flight,
11 row_number() over (partition by flight order by rn) rn,
12 origin,
13 destination
14 from (select flight,
15 min(rn) rn,
16 origin,
17 destination
18 from test
19 group by flight, origin, destination
20 )
21 order by flight, rn;
FLIGHT RN ORI DES
---------- ---------- --- ---
1111 1 LAX MIA
1111 2 MIA SCL
1111 3 SCL ARG
SQL>