У меня было похожее требование, и я решил его следующим образом:
select type, RTRIM(time/60) + ':' + RIGHT('0' + RTRIM(time%60),2) from
(
select type= ISNULL(type, 'Total'),
time= SUM(DATEDIFF(MINUTE, '0:00:00', time))
from time_test
GROUP BY ROLLUP(type)
) x
Я считаю, что это более понятно и легче отследить
type time
A 1:25
B 2:30
C 5:56
D 0:50
Total 10:41
Редактировать: Обновлен запросдля hour can be more then 24 hours
select type, RTRIM(time/60) + ':' + RIGHT('0' + RTRIM(time%60),2) from
(
select type= ISNULL(type, 'Total'),
time= SUM(DATEDIFF(MINUTE, '0:00:00',
DATEADD(day, SUBSTRING(time,0,CHARINDEX(':',time,0)) / 24,
DATEADD(hour, SUBSTRING(time,0,CHARINDEX(':',time,0)) % 24,
DATEADD(minute,SUBSTRING(time,CHARINDEX(':',time)+1,LEN(time)) +0, 0)) )))
from time_test
GROUP BY ROLLUP(type)
) x
Пример результата:
A 1:25
B 2:30
C 5:56
D 70:50
Total 80:41