SQL Server:当一天发生变化时跟踪排班
我正在使用员工计时系统,我一直在思考如何将轮班周期包括在内,这样系统就不会向上班或下班的员工发放加班时间 我最近搜索了一下,这帮了我很大的忙,但我不知道如何操纵它来运行下面的班次 更具体地说: SQL将如何确定员工是否下班? 在轮班但缺勤时标记个人缺勤? 我的班次是:SQL Server:当一天发生变化时跟踪排班,sql,sql-server,Sql,Sql Server,我正在使用员工计时系统,我一直在思考如何将轮班周期包括在内,这样系统就不会向上班或下班的员工发放加班时间 我最近搜索了一下,这帮了我很大的忙,但我不知道如何操纵它来运行下面的班次 更具体地说: SQL将如何确定员工是否下班? 在轮班但缺勤时标记个人缺勤? 我的班次是: D = Day N = Night O = Off 3-2-3 及 2-3-2 换档示意图 dddnnoo和DDNNNOO 低于 听起来你在数据库里做的太多了。我试着把这个问题读了好几遍,但我还是不明白你在问什么。你可能想重写这
D = Day
N = Night
O = Off
3-2-3
及
2-3-2
换档示意图
dddnnoo和DDNNNOO
低于
听起来你在数据库里做的太多了。我试着把这个问题读了好几遍,但我还是不明白你在问什么。你可能想重写这个问题,更清楚、更仔细地组织它的内容。@KRichard-是的。他的问题还不清楚。如何格式化代码-用鼠标选择/突出显示代码,按ctrl+k。如果用普通编程语言编写,并且创建所有数据的间隔并将它们切分在一起,这种类型的系统将非常容易编写。
;with Samples as (
-- Start at the beginning of 2013.
Select Cast('01-01-2013 00:00'as DateTime)as Sample
Union all
-- Add hours up to the desired end date.
Select DateAdd(hour, 1,Sample)from Samples where Sample <='2013-01-30'),
Extendedsamples as
(
-- Calculate the number of days since the beginning of the first shift on 1/1/2013.
Select Sample,DateDiff(hour,'01-01-2013 07:00',Sample)/ 24 as Days from Samples ),
Shifts as
(
-- Calculate the shifts for each day.
select*,
case when (Days+ 1 )% 14 in( 0, 1, 4, 5,6,9,10 )
then 'C/D' else 'A/B' end as Shifts from ExtendedSamples
)
select*,
case when DatePart(HOUR,Sample) between 7 and 18 then
Substring( Shifts, 1, 1 )else Substring( Shifts, 3, 1)end as Shift,
Case when DatePart(HOUR,Sample)between 7 and 18 then
'DAY' else 'NIGHT' end as Day_Night
from Shifts
option ( maxrecursion 0 )