oracle 我有一个包含员工详细信息的SQL表,我有3个单独工作的update语句,我想将其合并到一个单独的开始

vx6bjr1n  于 2022-12-18  发布在  Oracle
关注(0)|答案(2)|浏览(91)

我有一个包含员工详细信息的SQL表,我的问题是我有三个单独的updates语句,我想将它们放在一起,以便创建一个过程来更新该表,使其显示工资(包括奖金)和最近的工资日期(使用另一个奖金表
1]更新雇员_1集合雇员_1.薪金=(从奖金_1中选择总和(奖金_1.奖金金额),其中雇员_1.雇员标识=奖金_1.雇员标识按奖金_1.雇员标识分组);
2]更新雇员_1集合雇员_1.last_bonus_date =(从bonus_1中选择最大值(bonus_1.bonus_date),其中雇员_1.employee_id =bonus_1.employee_id按bonus_1.employee_id分组);
3]更新employee_1设置薪资=薪资+旧薪资;
我基本上需要合并这些更新语句,以便我可以在一个过程中使用它

gkl3eglg

gkl3eglg1#

您应该发布表的描述和示例数据来说明问题。
在我看来,似乎一条MERGE语句就完成了全部工作(例如,将3个查询合并为1个):

merge into employee_1 a
  using bonus_1 b
  on (a.employee_id = b.employee_id)
  when matched then update set
    a.salary = a.salary + b.bonus_amount,
    a.last_bonus_date = b.bonus_date;
ruarlubt

ruarlubt2#

可以使用MERGE语句并在USING子句中执行聚合:

MERGE INTO employee_1 e
USING (
  SELECT employee_id,
         SUM(bonus_amount) AS total_bonus,
         MAX(bonus_date) AS last_date
  FROM   bonus_1
  GROUP BY employee_id
) b
ON (e.employee_id = b.employee_id)
WHEN MATCHED THEN
  UPDATE
  SET salary          = e.salary + b.total_bonus,
      last_bonus_date = b.last_date;

相关问题