Предполагая следующую структуру таблицы:
mytable
mydate datetime
status ('pending', 'completed', 'rejected')
Вы можете сместить дату на 3 месяца, чтобы сгенерировать финансовый год, и выполнить условную агрегацию:
select
year(dateadd(month, -3, mydate)) fiscal_year,
month(mydate) fiscal_month,
sum(case when status = 'pending' then 1 else 0 end) pending,
sum(case when status = 'completed' then 1 else 0 end) completed,
sum(case when status = 'rejected' then 1 else 0 end) rejected,
count(*) total
from mytable
group by year(dateadd(month, -3, mydate)), month(mydate)
order by fiscal_year, fiscal_month
Это будет, для Например, поместите записи с марта 2019 года по апрель 2020 года в 2019 финансовом году.
Если вместо столбца fiscal_year
указано значение '2019-2020'
, вы можете заменить year(dateadd(month, -3, mydate))
на следующее выражение в select
пункт и group by
пункты:
cast(year(dateadd(month, -3, mydate)) as varchar(4))
+ '-'
+ cast(year(dateadd(month, -3, mydate)) + 1 as varchar(4))