Не знаете, с какой даты вы должны начать FY. Предположим из @STARTOFMONTH_MAN. Затем вы можете начать FY как
declare @fymonth int = 4; -- first month of FY.
declare @STARTOFMONTH_MAN date = '20160320';
select fyStart = dateadd(MONTH,
@fymonth - CASE WHEN month(@STARTOFMONTH_MAN) >= @fymonth THEN 1 ELSE 13 END,
dateadd(YEAR, datediff(YEAR, 0, @STARTOFMONTH_MAN),0));
Вы можете упростить эти расчеты дат, создав таблицу календаря.
EDIT
Идея ограничить данные в том, где с большим интервалом и условно SUM данных для подпериода.
declare @fymonth int = 4; -- first month of FY.
SELECT DISTINCT
ACCOUNTDATE
,PROPERTYNAME
,rt.FYManagement, rt.MonthManagement
FROM aaa t
CROSS APPLY
(SELECT
SUM(t2.MANAGEMENT) AS FYManagement
,SUM(CASE WHEN t2.ACCOUNTDATE BETWEEN
-- start of month for t.ACCOUNTDATE
dateadd(MONTH, datediff(MONTH, 0, t3.ACCOUNTDATE), 0)
AND t3.ACCOUNTDATE
THEN t2.MANAGEMENT END) AS MonthManagement
from aaa t2
JOIN aaa t3 ON t3.primarykey = t.primarykey -- change as needed to get 1 to 1 JOIN
where
t2.PROPERTYNAME = t.PROPERTYNAME and
t2.ACCOUNTDATE BETWEEN
-- FY start for t.ACCOUNTDATE
dateadd(MONTH,
@fymonth - CASE WHEN month(t.ACCOUNTDATE) >= @fymonth THEN 1 ELSE 13 END,
dateadd(YEAR, datediff(YEAR, 0, t.ACCOUNTDATE), 0));
AND t.ACCOUNTDATE
) as rt
WHERE AccountDate BETWEEN @STARTOFMONTH_MAN AND @ENDOFMONTH_MAN
ORDER BY AccountDate
спасибо за вашу помощь .. Мне нужно, чтобы начать FY с 1 апреля каждого года, и это будет динамичным. В этом запросе, например: текущее общее количество с 01/04/2015-31/03/2016 должно быть сброшено. – Swe
У меня это есть. Я имею в виду, что ваш запрос зависит от параметров, которые ограничивают период. Старт FY для первого параметра может быть 01.04.2015, а второй - 01.04.2016. Следует ли это учитывать в подзапросе или нет? – Serg
Да, период FY необходимо позаботиться. – Swe