【发布时间】:2011-07-07 21:51:02
【问题描述】:
我需要创建一个 SQL 查询来计算为特定客户 (n°108538) 工作的员工小时数。我们区分两种类型的计数:那些整周工作的人(37h50)和那些只在周六和周日工作的人(22h50)。
为了不惩罚他们,决定为他们提供 15 小时的奖金。
为了知道谁只在周末工作,我们在他们的合同中使用了一个特定的类别,即 n°206。其他员工有其他类别(001、250、604...),所以我无法对该类别进行简单的 GROUP BY。
请求的目的是计算所有员工从 2008 年 1 月到 2011 年 3 月的工作小时数,同时考虑“提供”给仅在周末工作的员工的小时数。
我想使用 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,但我不知道我还能用什么……有人知道吗?
【问题讨论】: