办公室时间:10:00 am to 18:00
pm。
办公室政策:实际上,我们的办公室政策是向员工支付加班费,因此他们只计算加班时间超过18:00 pm
时间,即使该人到达办公室17:00 pm
并且已经工作到{{1}即便如此,他将获得18:54 pm
的报酬,除了他没有工作的时间会导致从工资中扣除,但仍然适用于加班津贴。
问题:我写了这个查询来计算一个人每天工作的总时间,我的工作时间我的意思。现在我正在尝试计算一个新列54mins overtime
,该列应该显示一个人已经完成加班的持续时间,当且仅当一个人的工作时间超过OVERTIME
时,该时间应该在加班列以外的其他方面{ {1}}请帮助我
18:00 pm
输出:
Vignesh Kumar解决方案的输出:
答案 0 :(得分:1)
我认为你可以做DATEDIFF(MINUTE,OutTime,'18:00')。如果结果是积极的,那么他们就加班了。如果没有,那么只返回0.这可以在CASE语句中完成:
SELECT
CASE
WHEN DATEDIFF(MINUTE, OutTime, '18:00') > 0 THEN DATEDIFF(MINUTE, OutTime, '18:00')
ELSE 0
END AS 'Overtime'
(您可能需要输入“18:00:00”才能让SQL Server将其视为小时而非分钟。)
答案 1 :(得分:1)
请改为尝试:
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