Если в вашей таблице календаря праздников есть строка (я предполагаю, что выходные тоже есть), вам нужно найти максимальную дату, предшествующую текущей, для которой в таблице праздников нет строки.Затем сгруппируйте по этой «реальной дате» и суммируйте значение.Как то так:
declare @t table([DAYS] date, [VALUE] int)
declare @Holidays table([DAYS] date, Note varchar(100))
insert into @t values
('2018-01-01', 10),
('2018-01-02', 20),
('2018-01-03', 30),
('2018-01-04', 40),
('2018-01-05', 50),
('2018-01-06', 60),
('2018-01-07', 70),
('2018-01-08', 80),
('2018-01-09', 90),
('2018-01-10', 100)
insert into @Holidays values
('2018-01-01', 'Holiday-1'),
('2018-01-06', 'Saturday'),
('2018-01-07', 'Sunday'),
('2018-01-10', 'Holiday-2')
;with cte as (
select
IIF(h1.[DAYS] is not null /* i.e. it is a holiday */,
(select max([DAYS])
from @t t2
where t2.[DAYS] < t1.[DAYS] and not exists(select * from @Holidays h2 where h2.[DAYS] = t2.[DAYS])), t1.[DAYS]) as RealDate
, t1.[VALUE]
from @t t1
left join @Holidays h1 on t1.DAYS = h1.[DAYS]
)
select
RealDate
, sum([VALUE]) as RealValue
from cte
where RealDate is not null
group by RealDate