根据范围运行总计

时间:2015-11-10 08:22:37

标签: sql-server business-rules running-total

几天来一直试图解决这个问题(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作为参考的相同问题,以便将其与业务规则进行比较。

我并不反对将其作为存储过程...

0 个答案:

没有答案