SQL Server:当一天发生变化时跟踪排班

SQL Server:当一天发生变化时跟踪排班,sql,sql-server,Sql,Sql Server,我正在使用员工计时系统,我一直在思考如何将轮班周期包括在内,这样系统就不会向上班或下班的员工发放加班时间 我最近搜索了一下,这帮了我很大的忙,但我不知道如何操纵它来运行下面的班次 更具体地说: SQL将如何确定员工是否下班? 在轮班但缺勤时标记个人缺勤? 我的班次是: D = Day N = Night O = Off 3-2-3 及 2-3-2 换档示意图 dddnnoo和DDNNNOO 低于 听起来你在数据库里做的太多了。我试着把这个问题读了好几遍,但我还是不明白你在问什么。你可能想重写这

我正在使用员工计时系统,我一直在思考如何将轮班周期包括在内,这样系统就不会向上班或下班的员工发放加班时间

我最近搜索了一下,这帮了我很大的忙,但我不知道如何操纵它来运行下面的班次

更具体地说:

SQL将如何确定员工是否下班? 在轮班但缺勤时标记个人缺勤? 我的班次是:

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 )