【发布时间】:2014-01-06 19:57:16
【问题描述】:
我有一个存储功能,可以提取所有员工的时钟信息。我正在尝试提取异常报告来审核午餐。我当前的查询一次构建所有信息 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)在新列中报告“休息时间”
获得该信息后,我需要检查每个部分的时间并确保发生 2 件事。
1) 如果他们总共工作了 6 个小时,他们有 30 分钟的休息时间吗? 2)如果他们休息了,他们是否休息> 30分钟。
您会看到 Bob 在上午 11:55 打卡并在 3:36 打卡出去吃午饭。他 4 点 10 分吃完午饭回来打卡, 8 点 14 分下班。他总共工作了 7.75 小时,休息了 34 分钟。 他在这里很好。而且我不想报告异常
约翰总共工作了 7.65 小时。然而,当他打卡时,他只吃了22分钟的午餐。我需要报告“Jim 只吃了 22 分钟的午餐”
您还会看到 rob 连续工作了 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 显示负分钟数。它也没有结合日子。 Bob 的时间应该在 1 行。并显示 7.75 分钟的休息时间应该是 34 分钟。
【问题讨论】:
-
首先您使用 datediff(minute,outtime,intime) 来获取更多列。然后再次按用户名对 datediff 组求和。然后使用 case 语句进行备注。以正确的格式显示数据以及列名。
-
我要合并段...我只想报告那些休息时间少于30分钟的人,包括那些根本没有休息的人。我还需要报告他们在没有充分休息的情况下工作的总小时数
标签: sql sql-server sql-server-2008 tsql sql-server-2005