Oracle SQL-запрос для равномерного распределения задач между людьми - PullRequest
0 голосов
/ 16 ноября 2018

У меня есть таблица базы данных оракула 'table_1', имеющая 2 столбца с несколькими примерами строк, как показано ниже

CaseID    PerID
35039074    
36190822    
35067334    
36246430    
35239319    
36003875    

Записи в этой динамической таблице часто добавляются.

У меня есть другая таблица базы данных оракула 'table_2', имеющая 2 столбца с последующим фиксированным числом строк-

Name    PerID
Nokia   8385
Opppo   7698
Vivo    5684
Mi      2351

Я хочу обновить столбец 'PerID' в таблице_1, взяв PerID (из таблицы_2) и назначить каждому CaseID в таблице_1 последовательно следующим образом:

CaseID      PerID
35039074    8385
36190822    7698
35067334    5684
36246430    2351
35239319    8385
36003875    7698

Не могли бы вы помочь?

Ответы [ 2 ]

0 голосов
/ 16 ноября 2018

Вы можете сгенерировать значения, используя row_number():

with t1 as (
      select t1.*, rownum as seqnum
      from table_1 t1
     ),
     t2 as (
      select t2.*, rownum as seqnum, count(*) over () as cnt
      from table_2 t2
     ) t2
select t1.*, t2.perid
from table_1 t1 join
     table_2 t2
     on mod(t1.seqnum - 1, t2.cnt) = t2.seqnum;

Если вам нужно действительно обновить значение, тогда merge, вероятно, самый простой подход.

merge into table_1 t1
    using (with t1 as (select t1.*, rownum as seqnum
                       from table_1 t1
                      ),
                      t2 as (
                       select t2.*, rownum as seqnum, count(*) over () as cnt
                       from table_2 t2
                      ) t2
                 select t1.*, t2.perid
                 from table_1 t1 join
                      table_2 t2
                      on mod(t1.seqnum - 1, t2.cnt) = t2.seqnum
                )
    on (s.caseid = t1.caseid)
when matched
    then update
        set t1.perID = s.perID;
0 голосов
/ 16 ноября 2018

Попробуйте запрос ниже:

with cte as
(select CaseID ,PerID 
from table_2)
update table_1 set perID=CTE.PerID where caseID=CTE.PerID;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...