Мне нужно создать SQL-запрос для расчета количества часов сотрудников, работающих на конкретного клиента (n ° 108538).Мы различаем два типа подсчета: те, кто работал всю неделю (37: 50) и те, кто работал только в субботу и воскресенье (22: 50).
Чтобы не оштрафовать их, было решено предложить им бонус в 15 часов.
Чтобы узнать, кто работал только в выходные дни, мы используем конкретную категорию в их контракте, n ° 206.У других сотрудников есть другие категории (001, 250, 604 ...), поэтому я не могу сделать простой GROUP BY для этой категории.
Цель запроса - подсчитать количество отработанных часов всемисотрудник с января 2008 года по март 2011 года, принимая во внимание «часы», предлагаемые тем, кто работает только в выходные дни.
Я думал, используя EXISTS, чтобы знать, когда добавить эти бонусные часы, но я не получаюжелаемый результат.
Это запрос, который я написал:
SELECT employee.name, employee.surname, SUM(timesheet.hours_par_day +
(CASE
WHEN EXISTS (
SELECT *
FROM (SELECT contract.contrat_id
FROM contract, contract_categories
WHERE contract.customer_id = '108538'
AND contract.begin_date BETWEEN '01/01/2008' AND '01/03/2011'
AND contract_categories.contract_id = contract_categories.id_avenant
AND contract_categories.id_category = '206') ctrsd
WHERE ctrsd.contrat_id = contract.contrat_id)
THEN 15
ELSE 0
END
)
) AS hours_worked
FROM contract JOIN employee ON contract.employee_id = employee.employee_id
JOIN timesheet ON contract.contrat_id = timesheet.contrat_id
WHERE contract.customer_id = '108538'
AND contract.begin_date BETWEEN '01/01/2008' AND '01/03/2011'
AND employee .employee_id IN (
SELECT employee_id
FROM contract
WHERE contract.client_id = '108538' AND contract.end_date >= '01/01/2011')
Он рассчитывается правильно ... но не включает дополнительные 15 часов.Я предполагаю, что неправильно использую EXISTS, но я не знаю, что еще я могу использовать ... у кого-нибудь есть идеи?