3

好的,我们有一个 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;
4

3 回答 3

1

hours 应该是作业的属性,因此您可以像这样访问它:

Total.hours = Job.hours + Job2.hours;

翻译成

Total.hours = WA302.hours + HU047.hours;

翻译成

Total.hours = 6+5;

希望这对您的思考过程有所帮助,但除非您向我们展示您目前的工作方式(SQL、Java 等),否则我们无法帮助您完成思考过程。

编辑:从 SQL,

sum(hours)

每个工作都应该是自己的行。

于 2012-07-10T17:32:46.010 回答
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 子句。“日期”是属于该WHERE子句但不在“SELECT”子句中的字段的一个很好的例子。

这是一个可能会有所帮助的教程。此外,Access Help 应该会为您回答这个问题(尽管刚才我还没有找到我想要的关于这个主题的内容)。

此外,不要将表字段命名为“日期”,因为它是 Access 保留关键字,这一点非常重要

于 2012-07-10T18:55:09.417 回答
0

听起来您是按日期和项目分组,而不仅仅是日期。如果不知道 Access 数据库的架构或您尝试使用的查询,就不可能确定。

从您的问题的声音来看,您需要一份报告,该报告将按日期和员工为您提供小计。

我知道这不能完全解决您的问题,但是有很多工具可以跟踪员工的工作并进行工资核算。除非您有非常特殊的需求,否则我建议您使用 Quickbooks 之类的东西,而不是在 Access 中构建一些东西。查看http://quickbooksonline.intuit.com/time-tracking-software。请注意,我什至不使用它们,也不为它们工作,但几乎绝对值得他们为所有功能每月收取 40 美元。

于 2012-07-10T17:42:12.263 回答