我及时有3个值,如10.98,10.97,11.0小时。我把aquery写成了
select d.EmployeeID,
( (sum (floor(d.OTHour))+ floor(((sum(d.OTHour-floor(d.OTHour)))*100)/60))
+ cast(((cast(((sum(d.OTHour-floor(d.OTHour)))*100)as int))%60) as float)/100
) As TotalOT
from DailyAttnProcess d
where d.ShiftID in ( select distinct shiftID
from ShiftTerm st, ShiftTermDetail std, Term t
where st.ShiftTermID=std.ShiftTermID
and std.TermID=t.TermID and t.TermID=1)
and d.AttnDate between '01 Oct 2016' and '31 Oct 2016'
AND d.EmployeeID=9072
Group By d.EmployeeID
我得到的结果是34.15,但实际结果应该是32.57。任何人请帮我纠正这个。在此先感谢。
答案 0 :(得分:0)
您显示的数据不是时间,它就像一个带有整数小时和小时(60分钟= 1)的浮点数。
根据您的数据和32.57
的预期结果(小时& 分钟?),您只需要将结果的小数部分相加并乘以0.6:
floor(sum(d.OTHour)) -- full hours
+ (sum(d.OTHour) % 1)*0.6) -- fractional part in minutes
当然,如果将时间存储为TIME
而不是浮动,则会更容易。
答案 1 :(得分:0)
SELECT minutes / 60 + (minutes % 60) / 100.0
答案 2 :(得分:0)
您的值不是时间值,而是浮点值。 10.5
表示10:30
,10.75
表示10:45
。
您可以按 添加浮点值,然后计算代表秒数的值:
(此代码有点很多,只是为了显示原则)
DECLARE @tbl TABLE(HourWithFraction FLOAT);
INSERT INTO @tbl VALUES(10.98),(10.97),(11.0);
WITH SummedUp AS
(
SELECT SUM(HourWithFraction) AS SumOfTimes
FROM @tbl
)
,InParts AS
(
SELECT CAST(SumOfTimes AS INT) AS HourPart
,SumOfTimes - CAST(SumOfTimes AS INT) AS MinuteFraction
FROM SummedUp
)
SELECT HourPart
,MinuteFraction
,MinuteFraction * 0.6 AS SecondPart
,CAST(HourPart AS varchar(10)) + ':' + REPLACE(STR(MinuteFraction * 60,2),' ','0') AS FormattedTime
FROM InParts;
REPLACE
和STR
的使用是为了确保填充0
,如果第二个值只有一位数。
结果
HourPart MinuteFraction SecondPart FormattedTime
32 0,950000000000 0,57000000 32:57