几天来一直试图解决这个问题(SQL Server 2014)但它超出了我的开始\有限的知识。根据在LayOff或休假期间发生的资格期(基本上是否超过,重置资历的基本福利保留期),尝试计算员工资历的总计的实际情况。问题是资格长度是基于3个不同级别的资历。因此,当我尝试添加运行总计时,需要考虑何时裁员\假超过基于3级资历的允许资格。
我已将我的表格合并为一种格式,其中包含仅HireDate
(无就业历史记录条目)的员工(如129),并计算差距资格和资历时间。列如下:
RN =行号
ID_P = ID_Personnel
ID_Status =状态类型 - 1表示就业,2表示休假\解雇
Srt1-3 =(业务规则)年资年级断点
E1-3 =(业务规则)每个资历级别的资格期限 天
SCDate =状态更改日期,为每次更改输入的新日期 雇用来解雇\离开
EPDays =资格差距持续时间(天) - 休假期间的差距\下岗
SYrs =资历差距持续时间(年) - 雇员期间的差距
RTS(旺旺)=想要按照业务规则重置滚动总数 上述
这会生成以下数据,并且我已为RTS
列添加了手动值:
RN, ID_P, ID_S, Srt1, Srt2, Srt3, E1, E2, E3, SCDate , EPDays, SYrs, RTS (want)
1 , 129 , 1 , 0 , 5 , 10 , 30, 60, 90, 2012-06-12 , 0 , 3.41, 3.41
1 , 130 , 2 , 0 , 5 , 10 , 30, 60, 90, 2001-01-01 , 29 , 1.00, 1.00 (Continue RT due to 29 < 30 for Seniority less 5 years)
2 , 130 , 1 , 0 , 5 , 10 , 30, 60, 90, 2001-01-30 , 0 , 5.00, 6.00
3 , 130 , 2 , 0 , 5 , 10 , 30, 60, 90, 2006-01-30 , 61 , 0.00, 0 (reset RT due to 6 yrs seniority = 60 < 61)
4 , 130 , 1 , 0 , 5 , 10 , 30, 60, 90, 2006-04-01 , 0 , 9.60, 9.60
5 , 130 , 2 , 0 , 5 , 10 , 30, 60, 90, 2015-11-08 , 1 , 0.00, 9.60
1 , 131 , 2 , 0 , 5 , 10 , 30, 60, 90, 2000-02-01 , 28 , 0.08, 0.08 (Continue due to 28 < 30 for Srt1)
2 , 131 , 1 , 0 , 5 , 10 , 30, 60, 90, 2000-02-29 , 0 , 10.00,10.08
3 , 131 , 2 , 0 , 5 , 10 , 30, 60, 90, 2010-03-01 , 92 , 0.00, 0.00 (Reset due to 10 yrs seniority and 92>90)
4 , 131 , 1 , 0 , 5 , 10 , 30, 60, 90, 2010-06-01 , 0 , 5.44, 5.44
我尝试了几种Case,窗口函数,超前,滞后等变体,所有这些都遇到了无法使用run total作为参考的相同问题,以便将其与业务规则进行比较。
我并不反对将其作为存储过程...