【问题标题】:PL/SQL Assign number on each iterationPL/SQL 在每次迭代中分配编号
【发布时间】:2021-07-31 08:06:58
【问题描述】:

我正在尝试为我的每件商品分配一个值。这些是我的专栏:

Manager_id = 包含不断变化的经理数量 Sales_reps = 经理下的代表列表

我要做的是遍历每个经理并为其下的每个代表分配一个值(从 1 开始),如下所示:

Manager_1:
Rep_1
Rep_2

Manager_2:
Rep_1
Rep_2
Rep_3
Rep_4

Manager_3:
Rep_1
Rep_2

等等

我尝试了基本循环、for 循环、关联数组,但似乎没有任何效果。 有人可以帮帮我吗?

谢谢!

【问题讨论】:

  • edit您的问题包括minimal reproducible example,包括:尝试解决问题; YOUR 尝试的问题/错误;表的 DDL (CREATE TABLE) 语句;示例数据的 DML (INSERT) 语句。

标签: sql oracle loops plsql


【解决方案1】:

听起来像是嵌套循环问题。像这样的:

begin
  for cur_m in (select manager_id, manager_name, rownum rn from managers) 
  loop
    dbms_output.put_line(cur_m.manager_name ||'_'|| cur_m.rn);

    for cur_e in (select employee_name, rownum rn from employees
                  where manager_id = cur_m.manager_id
                 )
    loop
      dbms_output.put_line(cur_e.employee_name || cur_e.rn);
    end loop;
  end loop;
end;

回答您作为评论发布的问题:如果您想为每个经理重新启动序列,请将内部循环更改为

    for cur_e in (select employee_name, 
                    row_number() over (partition by manager_id order by employee_name) rn 
                  from employees
                  where manager_id = cur_m.manager_id
                 )

【讨论】:

  • 错字cur_rcur_m
  • 是的,有。谢谢你,@Suresh。
  • 谢谢!我可以麻烦你最后一次吗?这可行,但是......是否可以重置每个经理的号码?例如: Manager 1 = Rep 1 / Rep 2 Manager 2 =(重新开始计数) Rep 1 / Rep 2 / Rep 3 / Rep 4 类似的东西?将每个经理的计数设置回 1?谢谢你帮助我,你摇滚
  • 不客气。我在答案的底部发布了更多信息;请看一下。
  • 谢谢!我能麻烦你最后一次吗?对不起。我的 Rep 列多次重复相同的名称(Rep ABC 显示 X 次,原因是原始表中包含的数据),因此您提供的查询的最终结果(再次感谢您)显示该 Rep 的更高数字。例如经理 1 = 代表 ABC #6 / 代表 XYZ #3(第一个代表列在 3 行上,第二个代表列在原始表的 6 行上)。有没有办法只获取每个数字的第一个(最低)数字?
猜你喜欢
  • 2023-03-25
  • 2018-07-01
  • 2015-01-22
  • 2020-10-08
  • 1970-01-01
  • 2018-03-01
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
相关资源
最近更新 更多