Запрос на подсчет з/п сотрудников

Суть задачи: есть таблица Работников, где хранится оклад каждого сотрудника

Есть таблица Дополнительных заданий, где хранится оплата за выполнение задания.

И есть связующая таблица, где хранится id сотрудника и id работы

Мне нужно подсчитать з/п сотрудников за месяц. Проблема в том, что если человек принял участие в нескольких работах за месяц, то вычисления с ним производятся отдельно (то есть считается з/п для первой доп. работы и для второй, а не совместно).

Подскажите, пожалуйста, как это можно исправить?

Таблица работниковТаблица доп. работсвязующая таблицапроцедура подсчетавывод


Ответы (1 шт):

Автор решения: Vitaliy Zlobin

Мог где-то опечататься, но смысл такой: в подзапросе находим сумму за все доп. работы и джоиним с окладной частью.

CREATE PROCEDURE GET_TOTAL_SALARY
    @LAST_DAY smalldatetime
AS
    SELECT  W.ID_WORKER     AS "ID работника"
            W.FIRST_NAME    AS "Имя",
            W.SECOND_NAME   AS "Фамилия",
            W.SALARY        AS "Оклад",
            SP.SUM_PAYMENT  AS "Премия",
            W.SALARY + SP.SUM_PAYMENT AS "Итого"
    FROM Worker AS W
    LEFT JOIN
    (
        SELECT  ID_WORKER
                ,SUM(Payment) AS SUM_PAYMENT
        FROM ExtraWork AS EW
        JOIN TypeWork AS TW ON EW.FK_TypeWork = TW.ID_TypeWork
        WHERE YEAR(EW.LAST_DAY) = YEAR(@LAST_DAY)
            AND MONTH(EW.LAST_DAY) = MONTH(@LAST_DAY)
        GROUP BY ID_WORKER
    ) AS SP ON W.ID_WORKER = SP.ID_WORKER
→ Ссылка