Вот подход, который включает образцы данных:
declare @value int
select @value = 1
;with cte as
(
select cast(getdate() as date) dt
union all
select dateadd(day, -1, dt)
from cte
where dt > getdate() - 30
)
select *
from cte
where (@value = 1 and dt between DATEADD(day, -13, cast(getdate() as date)) and DATEADD(day, -7, cast(getdate() as date)))
or (@value = 2 and dt between DATEADD(day, -28, cast(getdate() as date)) and DATEADD(day, -14, cast(getdate() as date)))
or (@value = 3 and dt between DATEADD(day, -28, cast(getdate() as date)) and DATEADD(day, -7, cast(getdate() as date)))
Ключ находится в предложении where:
WHERE (@value = 1 AND [do this if @value = 1])
OR (@value = 2 AND [do this if @value = 2])
etc.