С небольшой помощью аналитической функции c (чтобы решить, какую CODEn
выбрать) и агрегации, вы получите это (при условии, что в каждом ID
есть максимум 3 кода).
Пример данных:
SQL> select * From src;
ID CODE
---------- ----
222 4wta
223 5qer
222 5qer
224 3der
Вставка:
SQL> insert into trg (id, code1, code2, code3)
2 with temp as
3 (select id, code,
4 row_number() over (partition by id order by code) rn
5 from src
6 )
7 select id,
8 max(case when rn = 1 then code end) code1,
9 max(case when rn = 2 then code end) code2,
10 max(case when rn = 3 then code end) code3
11 from temp
12 group by id;
3 rows created.
Результат:
SQL> select * From trg;
ID CODE1 CODE2 CODE3
---------- ----- ----- -----
222 4wta 5qer
223 5qer
224 3der
SQL>