Циклическая последовательность Oracle, основанная на определенном наборе записей - PullRequest
0 голосов
/ 08 мая 2019

так у меня есть эти таблицы

User table
NO| ID    | PID
1 | 00033 | P4
2 | 00033 | P3
3 | 00033 | P3

и

Program table 
NO | PROGRAM
1  | Prog-1
2  | Prog-2
3  | Prog-3
4  | Prog-4
5  | Prog-5

я ожидаю этого результата

NO| ID    | PID | PROGRAM_NO
1 | 00033 | P4  | 1
2 | 00033 | P3  | 2
3 | 00033 | P3  | 3

для следующего пакета номер_программы должен быть рассчитан на основе количества строк в таблице программ

NO| ID    | PID | PROGRAM_NO
1 | 00033 | P4  | 4
2 | 00033 | P3  | 5
3 | 00033 | P3  | 1

логика заключается в том, чтобы назначать случайным образом упорядоченное имя_программы на столе программы для таблиц пользователя в циклическом формате. и необходимо продолжить в следующей партии для оставшегося числа.

Я хотел бы знать, как добиться этого на оракуле.

С уважением, Риан

1 Ответ

0 голосов
/ 08 мая 2019

Я нашел решение, надеюсь, оно вам пригодится:

select no, program from(
select 1, p1.* from program p1 where no > 3  --3 is the last assigned program
union all
select 2, p2.* from program p2
order by 1, 2
fetch first 3 rows only
);

Результат:

Обратите внимание, что для этого решения вы всегда должны сохранять последний идентификатор программы, который был назначен. Например, вы можете сделать это в отдельной таблице или даже добавить новый столбец в таблицу программ.

...