Sql 按受抚养人人数将薪资更新10%
因此,我想根据每个受抚养人的情况,将员工的工资更新10%。因此,id一名员工在从属表中被三次提到,他的工资是100,更新后的工资是100*1.10*1.10*1.10,即133.1。这是员工表Sql 按受抚养人人数将薪资更新10%,sql,oracle,Sql,Oracle,因此,我想根据每个受抚养人的情况,将员工的工资更新10%。因此,id一名员工在从属表中被三次提到,他的工资是100,更新后的工资是100*1.10*1.10*1.10,即133.1。这是员工表 CREATE TABLE Employee ( ENumber CHAR(5) NOT NULL, /* Employee number */ Salary DECIMAL(7,2), /* Salary
CREATE TABLE Employee (
ENumber CHAR(5) NOT NULL, /* Employee number */
Salary DECIMAL(7,2), /* Salary */
CONSTRAINT Employee_PK PRIMARY KEY(ENumber)
);
这是从属表
CREATE TABLE Dependent (
ENumber CHAR(5) NOT NULL, /* Employee number */
DName VARCHAR(30) NOT NULL, /* Dependent name */
CONSTRAINT Dependent_PK PRIMARY KEY(ENumber, DName),
CONSTRAINT Dependent_FK FOREIGN KEY(ENumber) REFERENCES Employee(ENumber)
);
我可以更新他们的工资,但只能更新一次10%,而且无论他们有多少家属,都会更新。这就是我现在所拥有的
update employee set salary=salary*1.10 where enumber in (select enumber from dependent);
像这样:
UPDATE Employee e
SET Salary = Salary * POWER(1.1, (SELECT COUNT(*) FROM Dependent WHERE ENumber = e.ENumber));
这:
返回员工家属的编号,如p
,因此,您需要将
1.1
提高到p
的幂,然后乘以salary
,如下所示:
UPDATE Employee e
SET Salary = Salary * POWER(1.1, (SELECT COUNT(*) FROM Dependent WHERE ENumber = e.ENumber));
这:
返回员工家属的编号,如p
,因此,您需要将
1.1
提高到p
的幂次,然后乘以salary
您所做的是获取原始salary表中的行,并在它们有任何受抚养人时进行更新,而不是基于受抚养人的数量
UPDATE e SET e.salary=e.salary*POWER(1.10,d.DCount)
FROM employee e
JOIN (SELECT ENumber, COUNT(1) AS DCount FROM dependent GROUP BY ENumber) d
ON e.enumber = d.enumber
您要做的是获取原始薪资表中的行,如果它们有任何受抚养人,则更新它们,而不是基于受抚养人的数量
UPDATE e SET e.salary=e.salary*POWER(1.10,d.DCount)
FROM employee e
JOIN (SELECT ENumber, COUNT(1) AS DCount FROM dependent GROUP BY ENumber) d
ON e.enumber = d.enumber
我建议您阅读并提供文本格式的示例数据和预期结果。我建议您阅读并提供文本格式的示例数据和预期结果。