Вы можете сделать это с помощью пары оконных агрегатов, поместив ваш оригинальный запрос в CTE для удобства (подзапрос также будет работать):
declare @timeTable table (ID char(5) not null, IIn datetime not null,
IOut datetime not null)
insert into @timeTable(ID,IIn,IOut) values
('AB123','2015-11-06T15:24:44.057','2015-11-14T01:00:00.000'),
('QA565','2015-10-27T20:12:19.753','2015-11-06T03:00:00.000'),
('UN555','2015-12-29T06:29:23.417','2016-01-03T08:00:00.000'),
('LG602','2015-08-07T16:52:13.573','2015-08-11T03:00:00.000')
;With Diffs as (
SELECT ID, DATEDIFF(hour, IIn, IOut)/24.0 IDays
FROM @timeTable
)
select
*,
(
SUM(IDays) OVER (ORDER BY IDays, ID)
/
SUM(IDays) OVER ()
) * 100 as IDaysPer
from
Diffs
order by IDays
Обратите внимание, что я не совсем понял ваше требование "округления", но вы должны быть в состоянии использовать любую обычную технику округления, обернутую вокруг соответствующего вычисления. Так что мои выводы не совсем совпадают с вашими:
ID IDays IDaysPer
----- --------------------------------------- ---------------------------------------
LG602 3.458333 13.696300
UN555 5.083333 33.828300
AB123 7.416666 63.201300
QA565 9.291666 100.000000