나는이 쿼리를 작성하여 특정 날짜에 직원의 총 근무 시간과 초과 근무 시간 (해당 직원이있는 경우)을 표시합니다. 나는 특정 날짜에 사람의 INtime과 OutTime이 비어 있다면 자신의 intime, outtime, totalworkingtime, 초과 작업 시간에 00:00을 넣고 싶습니다. 일요일에 InTime과 OutTime이 없으므로 시간 열에 00:00을 표시해야합니다. 참고 : 날짜는 InTIme 개인이 언급 된 경우에만 입력되며 그렇지 않으면 DateVisited가 없습니다.다른 열의 데이터 계산
EmplID EmplName ShiftID intime Outtime totalworking overtime dateVisited
0000001 John S001 00:00 00:00 00:00: 00:00 2013-12-01
쿼리 :
귀하의 케이스를 들어WITH times
AS (SELECT t1.EmplID
,t3.EmplName
,MIN(t1.RecTime) AS InTime
,MAX(t2.RecTime) AS [TimeOut]
,t4.ShiftId AS ShiftID
,t4.StAtdTime AS ShStartTime
,t4.EndAtdTime AS ShEndTime
,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
INNER JOIN AtdShiftSect t4
ON t3.ShiftId = t4.ShiftId
GROUP BY t1.EmplID
,t3.EmplName
,t1.RecDate
,t4.ShiftId
,t4.StAtdTime
,t4.EndAtdTime)
SELECT EmplID
,EmplName
,ShiftId AS ShiftID
,InTime
,[TimeOut]
,CONVERT(CHAR(5), CAST([TimeOutSub] - InTimeSub AS TIME), 108) TotalWorkingTime
,[DateVisited]
,CASE WHEN [InTime] IS NOT NULL
AND [TimeOut] IS NOT NULL
THEN CONVERT(CHAR(5), CASE WHEN CAST([TimeOutSub] AS DATETIME) >= ShEndTime
AND ShiftID = 'S002'
THEN LEFT(CONVERT(VARCHAR(12), DATEADD(ms,
DATEDIFF(ms,
CAST(ShEndTime AS DATETIME),
CAST([TimeOutSub] AS DATETIME)),
0), 108), 5)
WHEN CAST([TimeOutSub] AS DATETIME) >= ShEndTime
AND ShiftID = 'S001'
THEN LEFT(CONVERT(VARCHAR(12), DATEADD(ms,
DATEDIFF(ms,
CAST(ShEndTime AS DATETIME),
CAST([TimeOutSub] AS DATETIME)),
0), 108), 5)
ELSE '00:00'
END, 108)
ELSE 'ABSENT'
END AS OverTime
FROM times
ORDER BY EmplID
,ShiftID
,DateVisited
질문을 명확히 할 수 있습니까? 네가 묻고있는 게 뭔지 잘 모르겠다. –
예 : 당신은 종업원이며 일요일이나 공휴일에 오지 않으면 이드와 매 등이 나타나야 만하지만 시간은 00:00이어야합니다. 그 날의 데이터가 없음을 의미합니다. – PreciseTech
사람의 시간 만 언급 할 때 날짜가 입력되었습니다. 나는 생물, etric 장치에서 실제로 그것을 얻고있다. INTIME then datevisited는 피드가되지만 문제는 사람이 부재중 인 경우 InTime이없고 방문한 날짜가 없으므로 확인할 방법이 – PreciseTech