按家属人数将薪水提高10%

时间:2018-12-17 17:17:39

标签: sql oracle

因此,我想按雇员的每个受抚养者来将雇员的工资更新10%。因此,在依赖表中有3名雇员被提及,他的工资是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);

2 个答案:

答案 0 :(得分:2)

赞:

UPDATE Employee e
SET Salary = Salary * POWER(1.1, (SELECT COUNT(*) FROM Dependent WHERE ENumber = e.ENumber));

此:

SELECT COUNT(*) FROM Dependent WHERE ENumber = e.ENumber

返回一个数字,说p个雇员的受抚养者,
因此您需要将1.1提高到p的幂,然后乘以salary

答案 1 :(得分:0)

您正在做的是获取原始薪水表中的行,并在行中有依赖项时对其进行更新,而不是基于受抚养者的数量。

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