我有一个存储功能,可以提取所有员工的时钟信息.我正试图提出一份例外报告来审核午餐.我当前的查询一次构建所有信息1段.
SELECT ftc.lEmployeeID, ftc.sFirstName, ftc.sLastName, ftc.dtTimeIn, ftc.dtTimeOut, ftc.TotalHours, ftc.PunchedIn, ftc.Edited FROM dbo.fTimeCard(@StartDate, @EndDate, @DeptList, @iActive, @EmployeeList) AS ftc LEFT OUTER JOIN Employees AS e ON ftc.lEmployeeID = e.lEmployeeID WHERE (ftc.TotalHours >= 0) AND (ftc.DID IS NOT NULL) OR (ftc.DID IS NOT NULL) AND (ftc.dtTimeOut IS NULL)
这个输出看起来像这样:
24 Bob bibby 8/2/2013 11:55:23 AM 8/2/2013 3:36:44 PM 3.68 24 bob bibby 8/2/2013 4:10:46 PM 8/2/2013 8:14:30 PM 4.07 39 rob blah 8/2/2013 8:01:57 AM 8/2/2013 5:01:40 PM 9.01 41 john doe 8/2/2013 10:09:58 AM 8/2/2013 1:33:38 PM 3.4 41 john doe 8/2/2013 1:55:56 PM 8/2/2013 6:10:15 PM 4.25
我需要查询来做两件事.
1)将每个段组合在一起.2)在新的列中报告"休息时间"
获得该信息后,我需要检查每个细分的小时数,并确保发生两件事.
1)如果他们共工作了6个小时,他们是否会休息30分钟?2)如果他们休息一下,他们会休息> 30分钟.
你看到鲍勃在上午11点55分打了一拳,并在3点36分打了一顿午餐.他于4点10分午餐时冲了上来,并于8点14分拳打脚踢.他共工作了7.75小时,并且休息了34分钟.他在这里很好.而且我不想报告例外情况
约翰总共工作了7.65个小时.然而,当他拳打脚踢时,他只吃了22分钟的午餐.我需要报告"吉姆只吃了22分钟的午餐"
你也会看到抢劫工作了9个小时,没有休息.我需要报告"抢劫工作超过6小时且没有休息"
我想如果我能完成对2段的分组.然后我可以处理报告方面.
*更新**
我更改了查询以尝试完成此操作.以下是我当前的查询:
SELECT ftc.lEmployeeID, ftc.sFirstName, ftc.sLastName, ftc.TotalHours, DATEDIFF(mi, MIN(ftc.dtTimeOut), MAX(ftc.dtTimeIn)) AS Break_Time_Minutes FROM dbo.fTimeCard(@StartDate, @EndDate, @DeptList, @iActive, @EmployeeList) AS ftc LEFT OUTER JOIN Employees AS e ON ftc.lEmployeeID = e.lEmployeeID WHERE (ftc.TotalHours >= 0) AND (ftc.DID IS NOT NULL) OR (ftc.DID IS NOT NULL) AND (ftc.dtTimeOut IS NULL) GROUP BY ftc.lEmployeeID, ftc.sFirstName, ftc.sLastName, ftc.TotalHours
我的输出目前看起来像这样:
24 Bob bibby 3.68 -221 24 bob bibby 4.07 -244 39 rob blah 0.05 -3 39 rob blah 2.63 -158 41 john doe 3.4 -204 41 john doe 4.25 -255
正如您所看到的那样,它没有按日期组合细分,而Break_time显示为负分钟.它也没有结合日子.鲍勃的时间应该在1行.并显示7.75分钟的休息时间应为34分钟.