我正在使用带有ms访问权限的vb6作为数据库创建工资单系统。我在ms访问中有3个表,即:
tblemployee, tblattendance, tblpayroll
我想获得2013年4月前所有员工的工资单。所有这些数据都来自tblattendance。
实施例。 (某些字段是隐藏的) tblattendance:
Empid Day Month Year totalhourworkfor1day
1 1 april 2013 8
2 1 april 2013 5
1 2 april 2013 8
2 2 april 2013 5
tblpayroll:
empid month year Totalhoursworkfor1month
1 april 2013 16
2 april 2013 10
查询2013年4月之后,将添加1名员工1天的总工作时间,结果将保存到Totalhoursworkfor1month。
怎么做?考虑到从我的vb6,我只需要选择月份和年份来生成工资单,然后它将显示到列表视图
尝试过的代码:
insert into tblpayroll(empid,month,year,hourswork)
select id,month, year, sum(hourswork) from tblattendance where empid=id group by empid;
答案 0 :(得分:1)
这有帮助吗? 日期只是一个字段。我使用了MinOfWorkDay,以避免在28,29,30,31结束的月份出现并发症。但如果你想要“月结束”,这可以解决。无论如何,您可以将结果格式化为仅显示月/年。
可以通过HAVING子句默认为刚刚结束的月份,或者使用在表单上输入的“from”和“to”日期来进一步增强它。
INSERT INTO tblPayroll ( Empid, HoursWorked, MonthEnd )
SELECT tblWork.Empid, Sum(tblWork.WorkHours) AS SumOfWorkHours, Min(tblWork.Workday) AS MinOfWorkday
FROM tblWork
GROUP BY tblWork.Empid
HAVING (((Min(tblWork.Workday)) Between #4/1/2013# And #4/30/2013#));
如果你回来提出更多问题,我会很乐意提供更多帮助。
4月15日:我觉醒了!我以为你会在MS Access中处理你的数据。我不知道vb6所以不能再帮忙了。你的整个项目可以在访问中完成吗?