在此处查看源数据照片:
这很奇怪!!!!我正在努力做一个相当于头数的全职!我的SQL语句为一行正确生成结果,在下一行中它是错误的!这两行都是用完全相同的代码生成的!!!!
这是我的查询...
SELECT Supervisor,
IFNULL(CASE WHEN DAYOFWEEK(workdate) = 3 THEN
IF(employeehours.paycode = '01 Ordinary' AND employeehours = 8,CASE WHEN
employeehours.paycode = '01 Ordinary' OR employeehours.paycode = '02 Overtime 1.5' OR
employeehours.paycode = '03 Overtime 2.0' THEN (SUM(employeehours)-0.4)/7.6 END,CASE WHEN
employeehours.paycode = '01 Ordinary' OR employeehours.paycode = '02 Overtime 1.5' OR
employeehours.paycode = '03 Overtime 2.0' THEN (SUM(employeehours)/7.6) END) END, 0)
`Tuesday`,
FROM payroll.employeedatanew_copy
JOIN payroll.employeehours ON employeedatanew_copy.`ID Number` =
employeehours.employeeid
WHERE employeehours.workdate BETWEEN '2013-12-02' AND '2013-12-07'
GROUP BY supervisor, id number
这是结果!!!! (不包括所有日子,但周二)
对于主管'Matt Taylor',我们有2名员工。
The first has:
8.00 in '01 ordinary'
1.60 in '02 overtime 1.5'
0.00 in '03 overtime 2.0'
The second has:
8.00 in '01 ordinary'
1.17 in '02 overtime 1.5'
0.00 in '03 overtime 2.0'
如果您手动进行计算,第一个将得到1.21,第二个得到1.15 ......为什么第一个用完全相同的编码方法计算错误!
答案 0 :(得分:0)
有人有一个保龄球得分计算查询,他们做的比他们需要的更复杂。 我通过先退一步,试图通过建立一个支点来简化它来帮助他们 每个人基础的相应列...然后应用你的数学......你可能会更好 用类似的方法......
尝试这只是为了确认数据的各个阶段......
SELECT
PreSum1.EmployeeID,
PreSum1.WorkDay,
PreSum1.RegTime,
PreSum1.OT15,
PreSum1.OT20,
( PreSum1.RegTime + PreSum.OT15 + PreSum.OT20
- IF( PreSum1.RegTime = 8, .4, 0 )) / 7.6 as DayTotal
from
( select
EH.EmployeeID,
DAYOFWEEK(EH.workdate) as WorkDay,
SUM( IF( EH.paycode = '01 Ordinary', EH.EmployeeHours, 0 )) as RegTime,
SUM( IF( EH.paycode = '02 Overtime 1.5', EH.EmployeeHours, 0 )) as OT15,
SUM( IF( EH.paycode = '03 Overtime 2.0', EH.EmployeeHours, 0 )) as OT20
FROM
EmployeeHours EH
WHERE
EH.workdate BETWEEN '2013-12-02' AND '2013-12-07'
group by
EH.EmployeeID,
DAYOFWEEK(EH.workdate) ) PreSum1
上面的查询每个人每天根据相关日期范围工作的小时数...并且仅针对您正在考虑的reg / ot1.5 / ot2.0的3个分类。
然后,您可以根据每个主管/员工ID将其包装到此
SELECT
NewData.Supervisor,
SUM( IF( EmpDaily.WorkDay = 1, EmpDaily.DayTotal, 0 )) as Sunday,
SUM( IF( EmpDaily.WorkDay = 2, EmpDaily.DayTotal, 0 )) as Monday,
SUM( IF( EmpDaily.WorkDay = 3, EmpDaily.DayTotal, 0 )) as Tuesday,
SUM( IF( EmpDaily.WorkDay = 4, EmpDaily.DayTotal, 0 )) as Wednesday,
SUM( IF( EmpDaily.WorkDay = 5, EmpDaily.DayTotal, 0 )) as Thursday,
SUM( IF( EmpDaily.WorkDay = 6, EmpDaily.DayTotal, 0 )) as Friday,
SUM( IF( EmpDaily.WorkDay = 7, EmpDaily.DayTotal, 0 )) as Saturday
from
payroll.employeedatanew_copy NewData
JOIN ( entire query above ) as EmpDaily
ON NewData.ID_Number = EmpDaily.EmployeeID
group by
NewData.Supervisor