사무실 시간 : 오전 10:00 - 오후 18:00.테이블의 초과 열
사람이 '8 시간 이상'근무한 경우 초과 근무를 표시하기 위해이 쿼리를 작성했습니다. 그가 초과 근무 시간보다 '08 : 44 시간 '을 수행했다면 00:44로 표시되지만 지금은이를 원하지 않습니다.
나는 이것을 TOTAL WORK TIME
을 기준으로 계산하고 싶지 않습니다. 나는 사람이 시계 시간보다 18:00 이상 일한 적이 있으면 초과 근무 시간을 표시해야한다.
오후 10시 50 분부터 오후 8시 33 분까지 근무한 사람이 초과 근무 시간보다 00:33을 표시해야합니다. 사람이 오후 18시 이상 근무한 경우에만 초과 근무를 계산해야합니다.
n.b. 실제로, 우리의 사무실 정책은 초과 근무 시간에 대해 직원에게 돈을 지불하는 것입니다. 따라서 직원이 오후 17:00에 사무실에 도착하여 오후 18:54까지 근무 했더라도 시간이 오후 18:00 이상인 초과 근무를 계산할 수 있습니다. 초과 근무 수당 54 분을 지불해야하며, 그 외에는 근무 시간을 지불하지 않으면 급여에서 공감할 수 있지만 초과 근무 수당에도 적용됩니다.
WITH Times AS
( SELECT emp.EmplID,
emp.EmplName,
InTime = MIN(atd.RecTime),
OutTime = MAX(atd.RecTime),
TimeWorked = DATEDIFF(MINUTE, MIN(atd.RecTime), MAX(atd.RecTime)),
OverTime = DATEDIFF(MINUTE, MIN(atd.RecTime), MAX(atd.RecTime)) - 480,
[DateVisited] = atd.RecDate
FROM AtdRecord atd
INNER JOIN HrEmployee emp
ON atd.EmplID = emp.EmplID
GROUP BY emp.EmplID, emp.EmplName, atd.RecDate
HAVING COUNT(atd.RecTime) > 1
)
SELECT t.EmplID,
t.EmplName,
t.InTime,
t.OutTime,
t.DateVisited,
TimeWorked = CONVERT(CHAR(5), DATEADD(MINUTE, t.TimeWorked, 0), 8),
OverTime = CASE WHEN t.OverTime < 0 THEN '-' ELSE '' END +
CONVERT(CHAR(5), DATEADD(MINUTE, ABS(t.OverTime), 0), 8)
FROM Times t
대문자와 뚜렷한 글꼴은 질문의 명확성을 높이기 위해 제거되었으며 대개 소리/악성 네티켓으로 간주됩니다. –