declare @T table
(
EmployeeId int,
EmployeeName varchar(10),
WorkedHours varchar(8)
)
insert into @T
select 1, 'ABC', '04:00:02' union all
select 2, 'XYZ', '07:23:01' union all
select 3, 'PQR', '11:02:15'
select right(100+T2.hh, 2)+':'+right(100+T2.mm, 2)+':'+right(100+T2.ss, 2) as TotalHours
from (
select dateadd(second, sum(datediff(second, 0, cast(WorkedHours as datetime))), 0) as WorkedSum
from @T
) as T1
cross apply (select datediff(hour, 0, T1.WorkedSum) as hh,
datepart(minute, T1.WorkedSum) as mm,
datepart(second, T1.WorkedSum) as ss) as T2
- Преобразовать WorkedHours в datetime
- Рассчитать количество секунд с 1900-01-01T00: 00: 00
- Сумма секунд для всех строк
- Преобразование секунд в дату и время
- Используйте
datediff
для вычисления количества часов - Используйте
datepart
для получения минут и секунд - Создайте полученную строку и используйте
right(100+T...)
добавить 0
перед значением, если это необходимо.
Часть cross apply ...
не требуется.Я добавил это, чтобы сделать код более понятным.Вы можете использовать выражения в cross apply
непосредственно в списке полей, если хотите.