Если я правильно понимаю, вы можете попытаться создать таблицу календаря на следующие 7 дней с помощью cte recursive
, а затем использовать CROSS APPLY
с values
make unpivot, чтобы получить Y
дату, которая является ближайшим днем.
declare @dateT datetime
set @dateT ='2018-06-15'
;with calendar as (
select @dateT startDt,dateadd(day,7,@dateT) endDt, 1 rn
union all
select dateadd(day,1,startDt) , endDt,rn +1
from calendar
WHERE dateadd(day,1,startDt)<endDt
), cte as (
select
atmid,v.*
from CRA_feasibility_test cross apply (
values ('monday',monday), ('tuesday',tuesday), ('wednesday',wednesday), ('thursday',thursday), ('friday',friday), ('saturday',saturday)
) v(name,flag)
)
select atmid,
@dateT today,
min(case when flag = 'Y' then startDt end) nextYDay,
datename(dw,min(case when flag = 'Y' then startDt end) ) nextYname
from calendar t1
join cte t2 on datename(dw,startDt) = t2.name
group by atmid
sqlfiddle
Результат
atmid today nextYDay nextYname
DA0068C1 15/06/2018 00:00:00 16/06/2018 00:00:00 Saturday