Разделите данные по нескольким столбцам в таблице ученика, используя pl / sql или sql - PullRequest
0 голосов
/ 26 марта 2020

Пожалуйста, помогите мне. В настоящее время я работаю над процедурой pl / sql. В спортивной таблице есть идентификатор и для того же идентификатора есть несколько кодов Мне нужно разделить эти несколько кодов и вставить их в таблицы учеников как code1, code2, code3.

Исходная таблица

ID  CODE
----------
222 4wta
----------
223 5qer
----------
222 5qer
-----------
224 3der
---------

Желаемая таблица

ID  CODE1   CODE2   CODE3
-------------------------
222 4wta    5qer    NULL
-------------------------
223 5qer    NULL    NULL
------------------------
224 3der    NULL    NULL
------------------------

1 Ответ

1 голос
/ 26 марта 2020

С небольшой помощью аналитической функции 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>
...