Shift(Rota)模式表SQL

Shift(Rota)模式表SQL,sql,sql-server,tsql,Sql,Sql Server,Tsql,大家好,我被要求创建一个employee表,这很好 SELECT ID, EmployeeNo, Surname, Forename, Team, BadgeNo, RotaType, StartDate, Flex, DaliyHours, CurrentTask, LastUpdated, LastUpdated_By FROM CHDS_Sandbox.dbo.emp_PeopleDHL; 我注意到他们有旋转打字,问

大家好,我被要求创建一个employee表,这很好

SELECT ID,
   EmployeeNo,
   Surname,
   Forename,
   Team,
   BadgeNo,
   RotaType,
   StartDate,
   Flex,
   DaliyHours,
   CurrentTask,
   LastUpdated,
   LastUpdated_By
FROM CHDS_Sandbox.dbo.emp_PeopleDHL;
我注意到他们有旋转打字,问为什么

我希望他们没有56种不同的轮班制,希望员工能够扫描他们徽章上的条形码,告诉他们未来7天或7个月的轮班制


所以,我应该为每个rota设置56个不同的表,还是有一种方法可以在表上设置并运行一个查询,该查询将查找日期,然后是旋转类型,并提供它们应该开始的时间?

一个表就可以了

create table RotaInfo (id INT identity (1,1),
                       RotaType INT, --should match the existing RotaType, this will be your FK
                       RotaName varchar(50),
                       DayOfMonth INT,
                       StartTime TIME,
                       EndTime TIME);

然后,您可以使用日历CTE获取任何给定员工的任何给定日期的开始/结束时间。

您的问题非常模糊-请记住,我们看不到您的屏幕,也不知道什么是
Rota
。但是,要回答您的第一个问题:不要创建56个表。。。为ROTA创建一个表,并向引用它的DHL表添加一个外键。您可能还想查看
加入
何处
。感谢Siyual(Rota是一个工作时间表)。第一个计划是为每个Rota安排一列,每天安排一行。然后轮换和说今天是相互交叉的,这将是他们今天开始的时间。首先,你需要弄清楚轮换的具体内容。可能是
RotaId
BaseDate
(周期开始的日期,只是为了让每个人都保持同步),
DayNumber
(偏移到周期中),
ShiftNumber
(假设存在公共移位)。班次将在另一个表中定义,例如
ShiftId
StartTime
EndTime
。(有趣的部分是处理跨越午夜的班次,即开始时间
结束时间
)改变班次或轮班表意味着什么,例如,它是一次性适用于每个人还是仅在第二天/月/周期/月周期开始时适用。。。我想你可能会把它放在这里,我会带着它走一段时间,看看我能不能让它工作。