![](/img/trans.png)
[英]How can I avoid MySQL queries in a FOREACH block when SUM is used on specific criteria?
[英]MYSQL How can I sum based on multiple criteria by date and by response
我正在嘗試根據 3 列匯總提供的小時數以及接受或拒絕的小時數。 1 列是日期 2 列是小時 3 是標准。 我需要將他們接受或拒絕 OT 的日期范圍之間的小時數相加。 我需要能夠在指定的日期范圍內計算是和否的響應。 @ 第 4 個總和行它不能正常工作,並且每隔一個總和行顯示錯誤的計數似乎工作。 看來我有兩個以上的條件是失敗的。
SELECT
employee.employee_ID,
employee.LastName,
employee.FirstName,
employee.Department,
employee.HomePhone,
employee.CellPhone,
SUM(CASE WHEN ot_tracking.shiftDate BETWEEN '2020-12-01' AND '2020-12-31' AND ot_tracking.operatorResponse = 'Yes' THEN ot_tracking.hours else 0 END) AS OT_Accepted,
SUM(CASE WHEN ot_tracking.shiftDate BETWEEN '2020-12-01' AND '2020-12-31' AND ot_tracking.operatorResponse = 'No' THEN ot_tracking.hours else 0 END) AS OT_Declind,
SUM(CASE WHEN ot_tracking.shiftDate BETWEEN '2020-12-01' AND '2020-12-31' AND ot_tracking.operatorResponse = 'Not Available - working or off' THEN ot_tracking.hours else 0 END) AS 'OT Unable to work',
SUM(CASE WHEN ot_tracking.shiftDate BETWEEN '202-12-01' AND '2020-12-31' AND ot_tracking.operatorResponse = 'Yes' OR ot_tracking.operatorResponse = 'No' THEN ot_tracking.hours else 0 END) AS 'OT Offered',
employee.Senority
FROM site
INNER JOIN employee
ON site.siteID = employee.siteID
LEFT OUTER JOIN ot_tracking
ON ot_tracking.employee_ID = employee.employee_ID
WHERE employee.siteID = 1
AND employee.Department <> 'shop' AND Department = 'Log Yard' AND LogLoader = 'Yes' AND Active = 'Yes'
GROUP BY ot_tracking.operator,
employee.Senority,
employee.Department
ORDER BY employee.Department, `OT Offered`, employee.Senority
將ot_tracking.operatorResponse = 'Yes' OR ot_tracking.operatorResponse = 'No'
括在括號內,因為運算符AND
的優先級高於OR
:
SUM(CASE WHEN ot_tracking.shiftDate BETWEEN '2020-12-01' AND '2020-12-31' AND (ot_tracking.operatorResponse = 'Yes' OR ot_tracking.operatorResponse = 'No') THEN ot_tracking.hours else 0 END) AS `OT Offered`
或使用 IN:
SUM(CASE WHEN ot_tracking.shiftDate BETWEEN '2020-12-01' AND '2020-12-31' AND ot_tracking.operatorResponse IN ('Yes', 'No') THEN ot_tracking.hours else 0 END) AS `OT Offered`
'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.