Sql 按受抚养人人数将薪资更新10%

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

因此,我想根据每个受抚养人的情况,将员工的工资更新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         */
    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
我建议您阅读并提供文本格式的示例数据和预期结果。我建议您阅读并提供文本格式的示例数据和预期结果。