Я написал этот запрос, чтобы показать сверхурочное время, если человек работал выше 18:00 часов, независимо от времени, в которое он пришел, или продолжительности работы, с которой он/она работал, что не соответствует теме , Он показывает только OVERTIME, если человек работал выше 18:00 вечера, то есть, например InTime = 15:16 pm и TimeOut = 18:31, а затем Overtime = 00:31. Таким образом, я написал этот запрос, приведенный ниже. НО ТЕПЕРЬ ПРОБЛЕМА - ЧТО СЛУЧАЙНЫЕ СОТРУДНИКИ ОСТАВЛЯЮТСЯ В 17:00, а их ПЕРЕДАЧА следует рассчитать после 17:00 (сколько минут + часов он работал только до 17:00), SO FOR эТИ ОСОБЫЕ сОТРУДНИКИ сВЕРХУРОЧНАЯ дОЛЖНО рАССЧИТАНЫ пОСЛЕ 17:00 PmОтображение результатов для конкретного человека
эти сотрудники:
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
ВЫВОД:
ОК сэр, Лемм попробовать это, то –
Большое спасибо, сэр, Большой –