При условии, что сумма не будет превышать 999 часов:
DECLARE @t TABLE(dt DATETIME);
INSERT @t SELECT '20110202 12:55'
UNION SELECT '20110305 00:40'
UNION SELECT '20110203 00:12';
WITH s AS
(
SELECT s = SUM(DATEDIFF(SECOND,
DATEADD(DAY, 0, DATEDIFF(DAY, 0, dt)), dt))
FROM @t
)
SELECT
s,
hhmmss = RIGHT('000' + RTRIM(s/3600), 3)
+ ':' + RIGHT('00' + RTRIM((s % 3600) / 60), 2)
+ ':' + RIGHT('00' + RTRIM((s % 3600) % 60), 2)
FROM s;
Однако, если то, что вы на самом деле храните, это длительность, почему бы не сохранить количество секунд вместо того, чтобы вклинивать ваши данные в неподходящий тип данных, для которого требуются все виды обходных путей для правильной обработки?