簡體   English   中英

MS Access \\ Jet SQL-員工上班和下班時間,同一張表,每個員工的總工作時間

[英]MS Access\Jet SQL - staff clock in & out times, same table, sum full time worked per staff

我有一個名為“ timings”的下表。 它保存着工作人員的來往情況(早上進,早上出,下午進,下午出)。

計時表我想要實現的是一個按staff_ref分組的輸出,其工作時間的總和是這樣的;

staff_ref|   total_worked|   
   U1            18:00

我目前使用4個單獨的查詢來選擇每個“類型”(morn_in,morn_out等),下面是用於type ='morn_in'的查詢,該查詢稱為[101 am in](稍后會引用);

SELECT 
staff_ref
, time
, Format([date],"dd/mm/yyyy") AS t_date
FROM timings
WHERE (((type)='morn_in'));  

然后,我將早晨時間之間的DateDiff求和;

SELECT 
[101 am in].staff_ref
, Sum(DateDiff("n",[101 am in].[time],[102 am out].[time])) AS morning_mins

FROM [101 am in] INNER JOIN [102 am out] 
 ON ([101 am in].staff_ref = [102 am out].staff_ref) 
 AND ([101 am in].date = [102 am out].date)
GROUP BY [101 am in].staff_ref;

然后在另一個查詢中分別求和下午時間的datediff(與上面相同),然后將這兩個查詢的結果相加在一起得出總數。

如您所見,它非常復雜,而且解釋起來並不簡單。

我想知道如何組合查詢,因此如果可能的話,我只需要一個語句即可返回結果。

如果我已經做了詳盡的解釋,請告訴我,我將進行修正。
謝謝

編輯1-03/07/2018
我使用下面的代碼提取所需的數據,因為它是一種“時間”數據類型,因此我必須計算總分鍾數,然后對小時進行\\ 60,對於分鍾進行MOD 60,因為結果超過24小時。

SELECT 
staff_ref, 
CLng(24*60*CDate(Sum(IIf([type]='morn_out',[time],0)-IIf([type]='morn_in',[time],0)+
IIf([type]='afternoon_out',[time],0)-IIf([type]='afternoon_in',[time],0)))) AS time_mins,
[time_mins]\60 & Format([time_mins] Mod 60,"\:00") AS convert_backHHMM

FROM timings

GROUP BY 
staff_ref, 
fix(time)
;

我想知道如何處理表具有“ morning_out”時間而沒有“ morning_in”時間(反之亦然)的可能性。 [系統的前端確實可以防止這種情況,但是我很好奇,想學習}。

感謝您的協助

嘗試這個:

SELECT 
    staff_ref,
    Sum(IIf([Type] = "morn_out", [date], 0) - IIf([Type] = "morn_in", [date], 0) +
        IIf([Type] = "afternoon_out", [date], 0) - IIf([Type] = "afternoon_in", [date], 0)) As TotalTime
FROM 
    [101 am in]
GROUP BY
    staff_ref,
    Fix([date]);

將格式應用於TotalTime,例如h:nn

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM