我有桌子。如何为工资添加奖金?
答案 0 :(得分:2)
在一般情况下
Workers
和Bonuses
查询sum
增加奖金或采取最大的奖励 - max
。 null
- 如果工人没有任何奖金像这样的东西
select w.WorkerId,
w.WorkerName,
w.CompanyId,
w.Salary + coalesce((select sum(b.Bonus) -- Let's sum up all worker's the bonuses
from Bonuses b
where b.WorkerId = w.WorkerId), 0)
from Workers w
如果您想update
现有的Workers
表格,那么原则相同:
update Workers
set Salary = Salary + coalesce((select sum(b.Bonus)
from Bonuses b
where b.WorkerId = WorkerId), 0);
但是,正如我可以看到Workers
和Bonuses
之间存在一对一的关系,这就是left join
会做的原因(参见< em> Wanderer的解决方案)。更好的方法是组合Workers
和Bonuses
表:
Worker:
WorkerId
WorkerName,
CompanyId,
Salary not null,
Bonus not null default 0 -- <- from Bonuses
因此您可以将查询简单地作为
select ...
Salary + Bonus
from Workers
答案 1 :(得分:1)
您可以使用 JOIN
。
<强>查询强>
select t1.WorkerID,
t1.WorkerName,
t1.CompanyID,
t1.Salary,
coalesce(t2.Bonus, 0) as Bonus,
t1.Salary + coalesce(t2.Bonus, 0) as [new_salary]
from Workers t1 left join
Bonuses t2 on t1.WorkerID = t2.WorkerID;
在这种情况下, LEFT JOIN
会更好,因为如果WorkerID
表中没有特定的Bonuses
,那么它也会出现在结果中。< / p>
答案 2 :(得分:0)
好吧,我在一年后回答,但是我相信它将对将来的人有所帮助,我测试了以上答案,看来我可以提供另一个好的解决方案。
此查询已在 MSSQL 引擎上进行了测试。
UPDATE w SET w.Salary = w.Salary + s.Bonus FROM Workers w INNER JOIN Bonuses s ON w.WorkerID = s.WorkerID