有一张桌子
表格:时间表
约会
日期
员工
持续时间
希望计算特定日期范围内约会的总时长,但是我想在每日时长上设置最大值。因此,如果某人预定了6个一小时的约会,但又又安排了12个小时的约会,使这一天总共18个小时,我想将每天的最长持续时间总和设置为10个小时以进行每周计算,那么我该如何正确去做。?使用Sql Servman Management Studio
下面是我的每日代码,只是不确定如何使每个员工的总代码如下:
select e.emp_id,Case when isnull(SUM(S.DURATION),0) > 10 then 10 else isnull(SUM(S.DURATION),0) end AS hours
from employee e left join Schedule s on s.emp_id = e.EMP_ID AND s.type <> 'z'
AND S.[DATE] >= CONVERT(VARCHAR(10),GETDATE()+1,121)
AND S.[DATE] <= CONVERT(VARCHAR(10),GETDATE()+5,121)
where e.INACTIVE = 'n'
AND E.U_ADVERTIS <> ''
group by s.[date],e.EMP_ID
order by e.EMP_ID
答案 0 :(得分:1)
DATEPART WK怎么样
也可以使用DATEPART ISOWK
(https://docs.microsoft.com/en-us/sql/t-sql/functions/datepart-transact-sql?view=sql-server-ver15)
select
e.emp_id,
DATEPART(WK,[S.Date]) as WeekNum,
Case
when isnull(SUM(S.DURATION),0) > 10 then 10
else isnull(SUM(S.DURATION),0)
end AS hours
from employee e
left join Schedule s
on s.emp_id = e.EMP_ID
AND s.type <> 'z'
AND S.[Date] > DATEADD(yy, DATEDIFF(yy, 0, GETDATE()) + 1, -1) -- Since the firs of the year, you can change this range up how you want/need
--AND S.[DATE] >= CONVERT(VARCHAR(10),GETDATE()+1,121)
--AND S.[DATE] <= CONVERT(VARCHAR(10),GETDATE()+5,121)
where e.INACTIVE = 'n'
AND E.U_ADVERTIS <> ''
group by DATEPART(wk,[S.Date]),e.EMP_ID
order by e.EMP_ID,DATEPART(wk,s.date) desc