我的这个表员工有列
name | salary
-------------
A | 5000
B | 2000
c | 1000
另一张桌子
适用于列
name| work
---------
A | w1
A | w2
A | w3
B | w4
B | w5
我希望每个工作增加100个员工的工资,并且只有当工作量大于1时才更新。 任何人都可以帮我解决这个问题。我需要一个sql更新查询(没有存储过程或触发器或游标)。
答案 0 :(得分:1)
这是正确的查询
update employee as a set salary = salary + 100 * NVL((
SELECT count(*)
FROM works as b
where b.name=a.name
group by name
having count(*)>1), 0)
答案 1 :(得分:1)
请尝试使用合并声明:
MERGE
INTO employee
USING (
select distinct "name", count(*) over (partition by "name") cnt from works
)x
ON (employee."name" = x."name")
WHEN MATCHED THEN
UPDATE
SET salary = salary+(100*case when cnt=1 then 0 else cnt end);