2014-10-02 56 views
0

我想總結一些時間值,當我的總和超過24小時時,它會從總數中減去24。添加等於24小時以上的時間值

這裏是我的SQL:

SELECT 
    UserID, 
    First_NM, 
    Last_NM, 
    MgrName, 
    CONVERT(varchar(5), DATEADD(minute, SUM(OnProd)/60, 0), 114) as OnProd, 
    CONVERT(varchar(5), DATEADD(minute, SUM(OffProd)/60, 0), 114) as OffProd, 
    CONVERT(varchar(5), DATEADD(minute, SUM(OnProd+OffProd)/60, 0), 114) as SumProd  

FROM (
    SELECT 
     UserID, 
     First_NM, 
     Last_NM, 
     MgrName, 
     CASE WHEN WorkUnitType LIKE '%On%' THEN DATEDIFF(s, DateStart, DateEnd) ELSE 0 END AS OnProd, 
     CASE WHEN WorkUnitType LIKE '%Off%' THEN DATEDIFF(s, DateStart, DateEnd) ELSE 0 END AS OffProd 

    FROM dbo.vw_mos_DPL_Reporting 

    ) a 
Group By 
    UserID, 
    First_NM, 
    Last_NM, 
    MgrName 

這是我的電流輸出:

UserID   First_NM  Last_NM  OnProd OffProd SumProd 
A05878   STEVEN  LANTE  22:28 09:55 08:23 
ARGLIN   ARNIE  FREEL  00:00 00:00 00:00 
B96695   JENNIFER  LARK  21:32 18:49 16:21 
PATYOI   PATTY  TROTTER  04:29 00:03 04:32 

我如何去解決這個?爲了清楚起見,我想顯示38:24或任何實際總和。總學時:總分鐘/ 60

+0

4人中,他們的'SumProd'錯了嗎? – 2014-10-02 16:14:23

+0

你正在選擇什麼看起來像日期時間,但使用datediff轉換爲秒(持續時間),以便您可以使用dateadd將其添加到0將其轉換回日期?在我看來,你正在計算持續時間的差異,而不是日期時間的差異。什麼是實際要求? – KingOfAllTrades 2014-10-02 16:24:22

+0

DATEADD(分鐘,SUM(OnProd + OffProd)/ 60,0)將返回DAYS,Hours和minutes,只顯示114和114的小時和分鐘只是截斷日期部分。 – 2014-10-02 16:34:40

回答

1

這是一個有點不雅,但你可以嘗試分開計算分鐘,小時和連接,例如,而不是

CONVERT(varchar(5), DATEADD(minute, SUM(OnProd)/60, 0), 114) as OnProd 

嘗試

SELECT CAST(SUM(OnProd)/3600 AS VARCHAR(6)) + ':' + RIGHT('00' + CAST((SUM(OnProd) % 3600)/60 AS VARCHAR(6)),2) AS OnProd 

你也必須爲OffProd和SumProd做同樣的事情。

+0

無論更好還是更糟糕,這都有訣竅。謝謝! – 2014-10-02 17:23:08