好的,我们有一个Access数据库,我们每天为每位员工记录后期制作,非制作和其他时间。员工可能有几天的时间在项目之间分配。
对于工资核算输入目的,我们设计了一个总计工作小时数的报告,并计算常规时间和加班时间。我遇到的问题是,如果工作日在两个项目之间分配,那么它会错误地计算该日期的小时数。
例如,7月10日,该员工共工作了11个小时。在这些时间内,有{5}花费在WA302
上,有6花在HU047
上。当我为工资核算小时生成报告时,它会单独给出两个金额的总计,这意味着加班时间将无法正确计算。
如何根据每天工作日期得出总时数?
这是SQL语句:
SELECT
EmployeeLookUptbl.EmployeeDriver,
EquipmentTimesheettbl.Employee,
EquipmentTimesheettbl.Date,
EquipmentTimesheettbl.ProductionHours,
EquipmentTimesheettbl.NonProductionHours,
EquipmentTimesheettbl.RepairHours,
EquipmentTimesheettbl.[Stat Holiday],
EquipmentTimesheettbl.TravelTime,
EquipmentTimesheettbl.TruckWash,
EquipmentTimesheettbl.FirstAid,
EquipmentTimesheettbl.DesignatedDriver,
EquipmentTimesheettbl.LOA,
EquipmentTimesheettbl.[Vehicle Allownance],
EquipmentTimesheettbl.DaysWorked,
[ProductionHours]+[NonProductionHours]+[RepairHours] AS TotalHours,
IIf([TotalHours]>8,8,[TotalHours]) AS RegularHours,
IIf([totalhours]<8,0,[totalhours]-8) AS Overtime,
EquipmentTimesheettbl.RPP,
EmployeeLookUptbl.FirstName,
EquipmentTimesheettbl.Phase
FROM
EquipmentTimesheettbl
LEFT JOIN EmployeeLookUptbl
ON EquipmentTimesheettbl.Employee = EmployeeLookUptbl.ReportName
WHERE
(((EquipmentTimesheettbl.Date)
Between [Enter Start Date] And [Enter End Date]))
ORDER BY EquipmentTimesheettbl.Date;
答案 0 :(得分:1)
小时应该是作业的属性,所以你可以像这样访问它:
Total.hours = Job.hours + Job2.hours;
转换为
Total.hours = WA302.hours + HU047.hours;
转换为
Total.hours = 6+5;
希望这有助于您的思考过程,但除非您向我们展示您目前的工作方式(SQL,Java等),否则我们无法帮助您进行其他思考过程。
编辑:来自SQL,
sum(hours)
每个工作都应该是自己的一行。
答案 1 :(得分:1)
您需要使用SUM()
来提供一个小时的总计。此外,简化查询 - 删除您不需要的所有字段。
从这开始:
SELECT Equip.Employee,
Sum([ProductionHours]) AS TotalProductionHours,
Sum([NonProductionHours]) AS TotalNonProductionHours,
Sum([RepairHours]) AS TotalRepairHours,
FROM EquipmentTimesheettbl As Equip
LEFT JOIN EmployeeLookUptbl As Employee
ON Equip.Employee = Employee.ReportName
WHERE
(((Equip.Date)
Between [Enter Start Date] And [Enter End Date]))
ORDER BY Equip.Date;
然后将其用作新查询的基础。如果他们提供的信息仅用于报告,您可以将上面的内容更加稀疏 - 保存您的JOINS以供日后使用。
无论您在哪里看到单独的行而不是总计,都要删除强制突破的字段或插入GROUP BY子句。 'Date'是属于WHERE
子句但不属于'SELECT'子句的字段的一个很好的例子。
这是tutorial可能会有所帮助。另外,Access Help应该为您解答这个问题(虽然我刚才没有找到关于这个主题的内容)。
此外,非常重要您没有将表字段命名为“Date”,因为这是一个Access保留关键字!
答案 2 :(得分:0)
听起来您按日期和项目进行分组,而不仅仅是日期。在不知道Access数据库的架构或您尝试使用的查询的情况下,无法确切知道。
根据您的问题的声音,您需要一份报告,该报告将按日期和员工为您提供小计。
我知道这不是你问题的答案,但是有很多工具可以跟踪员工的工作并做薪资。除非你有非常具体的需求,否则我建议使用像Quickbooks这样的东西,而不是在Access中构建一些东西。查看http://quickbooksonline.intuit.com/time-tracking-software。注意我甚至不使用它们,或者为它们工作,但它几乎绝对值得每月40美元收取所有功能。