【问题标题】:Oracle round robin sequence based on specific set of records基于特定记录集的 Oracle 循环序列
【发布时间】:2019-09-25 19:37:41
【问题描述】:

所以我有这些表

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

根据程序表的行数计算下一批的program_no

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

逻辑是将程序表上随机排序的 program_no 以循环格式分配给用户表。剩下的号码需要在下一批继续。

我想知道如何在 oracle 上实现这一点。

问候, 黎安

【问题讨论】:

  • 好的,我编辑示例
  • 那么背后的逻辑是什么?您可以使用最大值为 5 和循环选项的序列吗?

标签: sql oracle plsql sequence procedure


【解决方案1】:

我找到了解决办法,希望对你有用:

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
);

结果:

请注意,对于此解决方案,您应始终保存分配的最后一个程序 ID。例如,您可以在单独的表中执行此操作,甚至可以在 Program 表中添加新列。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-25
    • 1970-01-01
    • 2019-05-16
    • 1970-01-01
    • 2021-02-04
    • 2015-11-18
    相关资源
    最近更新 更多