我需要编写SQL查询,这将为我提供2015年10月1日的所有会计年度。所以现在它应该返回2016年,在2016年1月10日之后,查询应该返回2016年,2017年。与10/01/2017之后相同,查询应该返回2016,2017,2018。我很难想出来此Query的任何逻辑。我需要将查询作为SSRS报告的参数。 任何帮助表示赞赏。非常感谢你
答案 0 :(得分:1)
您可以生成一个列表,使用递归查询指定开始和结束,如下所示:
with cte(YR)
as(select cast('10/1/2016' as date) as YR
union all
Select dateadd(year, 1, YR)
from cte
where YR < cast('10/1/2020' as date)
)
select * from cte;
答案 1 :(得分:0)
所以这就是我根据莫的建议提出的。
declare @curMonth int
set @curMonth = datepart(month, getdate());
with cte(YR)
as(select cast('10/1/2016' as date) as YR
union all
Select dateadd(year, 1, YR)
from cte
where YR < case
when @curmonth >= 10
then dateadd(year, 1, getdate())
else cast(getdate() as date)
end
)
select datepart(year,YR) as YR from cte;
感谢Mo2和John Cappeliti的回答。