Возможно, я слишком задумываюсь об этом, но я немного в тупике.Возврат списка финансовых лет между диапазонами дат
Я пытаюсь суммировать данные по месяцам, по финансовому году, возвращая одну строку за финансовый год, со столбцом за каждый месяц.
Я могу вернуть одну колонку в месяц легко, однако стараюсь вернуть финансовые годы, поскольку строки доказывают трудную часть.
Моя теория когда у меня есть финансовый год, выбранный в качестве строки, я могу просто присоединиться к этому в подзапроса суммируется финансового года/месяца, давая мне 1 на 1.
Проблема в том, запускается финансовый год 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 - это не данные dbase, это рекурсивная функция. – OWSam
О, доброе горе .... Мне нужно больше кофейного стата !!! –