【发布时间】:2014-08-28 13:46:12
【问题描述】:
也许我想多了,但我有点难过。
我正在尝试按月、按财政年度汇总数据,每个财政年度返回一行,每个月有一列。
我可以轻松地每月返回一列,但是尝试将财务年度作为行返回证明是困难的部分。
我的理论是,一旦我将财政年度选为一行,我可以简单地将其加入到按财政年度/月份总结的子查询中,每 1 给我 1。
问题是财政年度从 8 月 1 日开始。查询的日期范围可以从 1 个财政年度到可能跨越 5 年的日期范围。
例如,如果我的日期范围是 01/08/2013-31/07/2014,我希望财政年度返回为:
2013/2014
如果我的日期范围是 01/08/2012-31/07/2014,我希望将以下内容作为财政年度返回:
2012/2013
2013/2014
如果我的日期范围是 01/01/2012-28/08/2014,我希望将以下内容作为财政年度返回:
2011/2012
2012/2013
2013/2014
2014/2015
这是我迄今为止的工作,但它没有按预期工作。
DECLARE @DateFrom datetime, @DateTo datetime
SET @DateFrom = '2011-08-01'
set @DateTo = '2014-07-31'
; with FinYr as
(
select @DateFrom as AllDate, @DAteTo as EndDate, case when datepart(MONTH, @DateFrom) < 8 then convert(varchar(4),datepart(year, @DateFrom)-1)+'/'+convert(varchar(4),datepart(year, @DateFrom)) else convert(varchar(4),datepart(year, @DateFrom))+'/'+convert(varchar(4),datepart(year, @DateFrom)+1) End as FinYear
union all
select dateadd(year,1,AllDate) as AllDate, dateadd(year,1,EndDate) as EndDate,case when datepart(MONTH, dateadd(year,1,AllDate)) < 8 then convert(varchar(4),datepart(year, dateadd(year,1,AllDate))-1)+'/'+convert(varchar(4),datepart(year, dateadd(year,1,AllDate))) else convert(varchar(4),datepart(year, dateadd(year,1,AllDate)))+'/'+convert(varchar(4),datepart(year, dateadd(year,1,AllDate))+1) End as FinYear
from FinYr
where dateadd(year,-1,EndDate) <= convert(datetime,(convert(varchar(4),year(@Dateto))+'-07-31'))
)
select AllDate,EndDate, FinYear
from FinYr
【问题讨论】:
-
你能发布 ddl 和 FinYr 的一些示例数据吗?
-
FinYr 不是数据库中的数据,它是一个递归函数。
-
哦,天哪……我需要更多的咖啡数据!!!
标签: sql-server