滚动总和有两个条件

时间:2018-05-24 11:31:07

标签: sql database ms-access

我正在为我所在的公司开发一个ms访问数据库,主要是为了保留员工记录,带薪休假和每月出勤率,但是我还没有想到这个问题。

我将付费休假表格列设置如下:

|ID|Month|Current_Leave|Earned_Leave|Absences|New_Leave|

ID + Month被设置为表的主键

我希望此表能够将多个员工的休假记录保存多个月,并且我将New_Leave设置为计算字段,其中:

(current_leave +  earned_leave - absences = new_leave)

但是,我无法弄清楚如何创建一个新记录,其中包含下一个月的重复ID(同一员工),其中Current_Leave =上个月的New_Leave

例如: https://i.stack.imgur.com/lkO9C.png

任何建议?,伪代码可以帮助,执行方法会很棒。

1 个答案:

答案 0 :(得分:1)

我没有看到一年的字段,所以我会假设你的月份不是日历月,而是仅仅工作几个月或类似的事情。在这种情况下,如果月份是正确的数字,您可以使用:

NZ(DLookup(" New_Leave"," TableName"," [Month] ="& [Month] -1),0)

如果您不想更改设计以使月份成为正确的数字,则必须处理将文字转换为数字:

NZ(DLookup(" New_Leave"," TableName"," CInt([Month])="& CInt([Month]) - 1 ),0)

如果您的文字月份字段不代表正确的数字,则会失败。

如果您100%确定前一个月将始终存在(月份= 1时不太可能),您可以取消Nz部分。

说了这么多,我认为你的整体设计存在严重缺陷。解决问题的正确方法是拥有一个包含EmployeeID,Date,LeaveAmount的表(其中,negative表示获得假,或者单独的Yes / No字段表示该表)。这是您需要的唯一静态信息。其他所有内容都应根据需要在表格/报告中计算,而不是在表格中计算。