У меня есть требование выбрать данные для разных диапазонов дат, в зависимости от текущего месяца, в котором они выполняются. У меня есть хранимая процедура, которая принимает введенную пользователем дату, т.е. 04/06/2020, в переменную @PPE
. Исходя из части месяца этой даты, мне нужно запросить различные диапазоны, как в следующем финансовом году (1 июля - 30 июня): я использую пример с использованием финансового года 2020.
MONTH(@PPE) Date Range to Query
July 07/01/2019 - 07/01/2019
August 07/01/2019 - 08/31/2019
September 07/01/2019 - 09/30/2019
October 07/01/2019 - 09/30/2019
November 07/01/2019 - 09/30/2019
December 07/01/2019 - 09/30/2019
January 07/01/2019 - 12/31/2019
February 07/01/2019 - 12/31/2019
March 07/01/2019 - 12/31/2019
April 07/01/2019 - 03/31/2020
May 07/01/2019 - 03/31/2020
June 07/01/2019 - 03/31/2020
Затем, начиная со следующего финансового года (2021), он будет go следующим образом и далее ...
MONTH(@PPE) Date Range to Query
July 07/01/2020 - 07/01/2020
August 07/01/2020 - 08/31/2020
September 07/01/2020 - 09/30/2020
October 07/01/2020 - 09/30/2020
November 07/01/2020 - 09/30/2020
December 07/01/2020 - 09/30/2020
January 07/01/2020 - 12/31/2020
February 07/01/2020 - 12/31/2020
March 07/01/2020 - 12/31/2020
April 07/01/2019 - 03/31/2021
May 07/01/2019 - 03/31/2021
June 07/01/2019 - 03/31/2021
Я начал с этого запроса, но у меня возникли проблемы с манипулированием правильным FISCAL_YEAR
, чтобы поставить в зависимости от месяца @PPE
, поскольку он охватывает 2 года с апреля по июнь.
PERIOD
представляет номер финансового месяца, т. е. июль = 1, август = 2, .. ..Июня = 12
DECLARE @PPE datetime; SET @PPE = '04/06/2020'
SELECT COMPANY, DEPTID, FISCAL_YEAR, PERIOD, GH_REPORTID, SUM(GH_HOURS), SUM(GH_DOLLARS)
FROM PS_GH_SLT_ACTUALS
WHERE DEPTID = 55650000
AND GH_REPORTID = 'BA'
AND PERIOD <= CASE WHEN MONTH(@PPE) BETWEEN 1 AND 3 THEN 12
WHEN MONTH(@PPE) BETWEEN 4 AND 6 THEN 3
WHEN MONTH(@PPE) BETWEEN 7 AND 9 THEN 6
WHEN MONTH(@PPE) BETWEEN 10 AND 12 THEN 9
END
-- AND PERIOD <= 7 ???
AND FISCAL_YEAR = CASE WHEN MONTH(@PPE) BETWEEN 1 AND 3 THEN YEAR(@PPE)
WHEN MONTH(@PPE) BETWEEN 4 AND 6 THEN ....???
GROUP BY COMPANY, DEPTID, FISCAL_YEAR, PERIOD, GH_REPORTID