2014-10-02 57 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