0
我已经写了这个查询来显示加班时间,如果人员的工作时间超过了18:00时钟时间,无论他/她来了什么时间或工作的持续时间,这是超出主题。它只显示OVERTIME是否已经在18:00 pm以上工作过,例如InTime = 15:16 pm和TimeOut = 18:31然后加班= 00:31。因此,我写了下面给出的这个查询,但现在的问题是几个雇员在17:00 pm离开,他们的超时应该在17:00 pm之后计算(他只在17:00 pm以上工作了多少分钟+小时),所以这些特定员工加班费应为计算出来后被下午17:00显示特定人员的结果
的那些雇员:
EmplID 5, 43, 11
所以只有这些加班应在17:00之后进行计算。
查询:
with times as (
SELECT t1.EmplID
, t3.EmplName
, min(t1.RecTime) AS InTime
, max(t2.RecTime) AS [TimeOut]
, cast(min(t1.RecTime) as datetime) AS InTimeSub
, cast(max(t2.RecTime) as datetime) AS TimeOutSub
, t1.RecDate AS [DateVisited]
FROM AtdRecord t1
INNER JOIN
AtdRecord t2
ON t1.EmplID = t2.EmplID
AND t1.RecDate = t2.RecDate
AND t1.RecTime < t2.RecTime
inner join
HrEmployee t3
ON t3.EmplID = t1.EmplID
group by
t1.EmplID
, t3.EmplName
, t1.RecDate
)
SELECT EmplID
,EmplName
,InTime
,[TimeOut]
,[DateVisited]
,convert(char(5),cast([TimeOutSub] - InTimeSub as time), 108) totaltime
,CONVERT(char(5),CASE WHEN CAST([TimeOutSub] AS DATETIME) >= '18:00' Then
LEFT(CONVERT(varchar(12), DATEADD(ms, DATEDIFF(ms, CAST('18:00' AS DATETIME),
CAST([TimeOutSub] AS DATETIME)),0), 108),5) ELSE '00:00' END, 108) AS OVERTIME
FROM times
OUTPUT:
OK先生,还是让我试试这个,然后 –
非常感谢主席先生,大 –