обновить зарплату на 10% по количеству иракских оракулов - PullRequest
0 голосов
/ 17 декабря 2018

Итак, я хочу обновить зарплату сотрудников на 10% по каждому их иждивенцу.Таким образом, если сотрудник упоминается трижды в зависимой таблице, его зарплата составляет 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 голосов
/ 17 декабря 2018

Что вы делаете, это берете строки в исходной таблице зарплат и обновляете их, если у них есть какие-либо иждивенцы, не основываясь на количестве иждивенцев.

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
0 голосов
/ 17 декабря 2018

Вот так:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...