3

わかりました。ポスト プロダクション、非プロダクション、およびその他の時間を各従業員について毎日記録する Access データベースがあります。従業員には、プロジェクト間で勤務時間が分割される日がある場合があります。

給与入力の目的で、勤務時間を合計し、通常の時間と残業時間を計算するレポートを設計しました。私が抱えている問題は、勤務日が 2 つのプロジェクトに分割されている場合、その日付の時間が間違って計算されることです。

たとえば、7 月 10 日に、従業員は合計 11 時間働きました。これらの時間のうち、5 時間は に費やされWA302、6 時間は に費やされましたHU047。給与計算時間のレポートを生成すると、2 つの金額の合計が個別に表示されます。これは、残業時間が正しく計算されないことを意味します。

各日の勤務日に基づいて時間を合計するにはどうすればよいですか?

これは 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

時間はジョブのプロパティである必要があるため、次のようにアクセスできます。

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 がこれに答えてくれるはずです (ただし、このトピックについて知りたいことがまったく見つかりませんでした)。

また、テーブル フィールドに「Date」という名前を付けない ことも非常に重要です。これは Access の予約キーワードです。

于 2012-07-10T18:55:09.417 に答える
0

日付だけでなく、日付とプロジェクトでグループ化しているようです。Access データベースのスキーマまたは使用しようとしているクエリを知らなければ、確実に知ることはできません。

質問の内容から、日付と従業員別の小計を示すレポートが必要だとします。

それがあなたの問題に対する正確な答えではないことはわかっていますが、従業員の仕事を追跡し、給与計算を行うためのツールはたくさんあります。非常に特殊なニーズがない限り、Access で何かを構築する代わりに、Quickbooks などを使用することをお勧めします。http://quickbooksonline.intuit.com/time-tracking-softwareをチェックしてください。私はそれらを使用したり、働いたりしていませんが、すべての機能に対して月額 40 ドルを請求する価値はほぼ間違いなくあります。

于 2012-07-10T17:42:12.263 に答える