Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
T-SQL-计算rota模式_Sql_Sql Server_Sql Server 2012_Sequence - Fatal编程技术网

T-SQL-计算rota模式

T-SQL-计算rota模式,sql,sql-server,sql-server-2012,sequence,Sql,Sql Server,Sql Server 2012,Sequence,我正在使用SQL 2012。 我有一个填充了人员数据的数据库表。每个人都有一个开始日期(1/1/1990,24/11/2004,3/4/2018等) 每个人都有一个固定长度的轮换表,从他们各自的开始日期开始 模式根据其长度滚动,例如在再次发生前7、14、21天,并受合同长度的约束 字段: 如果您的合同长度为“4”,并且在第2天您完全可用,则数据库会将您的合同显示为第0天开始结束、第1天开始结束、第3天开始结束,因为数据库记录数据的方式只会告诉您何时不可用,您必须推断您可用 我们希望创建一个脚本

我正在使用SQL 2012。 我有一个填充了人员数据的数据库表。每个人都有一个开始日期(
1/1/1990
24/11/2004
3/4/2018
等)

每个人都有一个固定长度的轮换表,从他们各自的开始日期开始

模式根据其长度滚动,例如在再次发生前7、14、21天,并受合同长度的约束

字段:

如果您的合同长度为“4”,并且在第2天您完全可用,则数据库会将您的合同显示为第0天开始结束、第1天开始结束、第3天开始结束,因为数据库记录数据的方式只会告诉您何时不可用,您必须推断您可用


我们希望创建一个脚本,以便根据某人的开始日期和模式,我们可以确定他们在[用户定义日期]的rota的哪一天。

请添加一个表示所需输出的表格好吗?你的解释并不完全清楚你在这里想要什么。DATEDIFF(day,[Start Date],@UserDefinedDate)%[Length of Pattern]+1--会给你第1,2,3,4天。。。。。。图案长度(%)是mod,或模算术值,因此,它将随着与开始日期的天数差的增加而循环取整。您需要将ContractDaysRange字段拆分为ContractDaysMin和ContractDaysMax的两列。@iamdave所需的输出是一个附加列,用于确定自当前日期起个人当前在rota模式的哪一天。@pseuronym您这么说很好,但对于我们这些不熟悉您的环境和数据源的人来说,向我们提供原始数据表(我认为您问题中的图片不是您的实际源表)和我们可以检查解决方案的精确输出非常有帮助。这样做会使这里的志愿者更愿意花时间帮助你。