2009-08-17 36 views
1

使用Access 2003如何獲得適當的總時間值?

PersonID TotalHours 

111 12.23.34 
111 23.32.23 
111 14.32.23 
222 00:23:32 
222 01:00:00 

...等,

TotalHours數據類型爲datetime

查詢中使用。

Select Personid, sum (TotalHours) from table group by personid. 

它顯示

Personid TotalHours 

111 4.30842592592593 
222 7.93241898148148 

...等,

我想表明的總和(TotalHours)適當的時間格式。贊(HH:MM:SS)

期望輸出

Personid TotalHours 

111 32:44:23 
222 23:11:22 

...等,

需要查詢的幫助。

+0

您彙總(如「32:44:23 「)沒有意義,你確定」12.23.34「是日期時間嗎? – gbn 2009-08-17 07:16:14

+0

@gbn。我把一個樣本輸出。我不會輸出確切的結果。我需要(hh:mm:ss)格式。好.... – Gopal 2009-08-17 07:28:02

回答

1

發生了什麼事是,它共計時代的數字表示

你可以這樣做:

Select Personid, cdate(sum (TotalHours)) as GrandTotal 
from table 
group by personid. 

但你會得到的結果是這樣的:

111 1900-01-01 2:28:10 AM 
222    1:23:32 AM 

這是因爲Personalid 111超過24小時

你真的很hav要做的就是把時間縮短到秒鐘;然後添加它們;然後再將其分解成幾小時/分鐘/秒;我這樣做有兩個查詢

[time_1 definition] 

SELECT time_tab.pid, 
    Sum(Hour([time]) * 3600 
    + Minute([time]) * 60 
    + Second([time])) AS time_total 
FROM time_tab 
GROUP BY time_tab.pid; 


[time_2 definition] 

SELECT time_1.pid, 
    Int([time_total]/3600) AS h, 
    Int(([time_total]-Int([time_total]/3600) * 3600)/60) AS m, 
    [time_total] 
     - (Int(([time_total]-Int([time_total]/3600) * 3600)/60)*60 
      + (Int([time_total]/3600)*3600)) AS s 
FROM time_1 

這給了我

111 50 28 10 
222 1 23 32 

OR

[time_2 definition] 

SELECT time_1.pid, 
    Int([time_total]/3600) & ":" 
     & Int(([time_total]-Int([time_total]/3600) * 3600)/60) & ":" 
     & [time_total] 
      - (Int(([time_total]-Int([time_total]/3600) * 3600)/60) * 60 
      + (Int([time_total]/3600)*3600)) AS grand_total 
FROM time_1 

這給了我

111 50:28:10 
222 1:23:32