在查询财政年度时获取动态日期范围的逻辑
Logic to get dynamic date range in query for Fiscal Year
我需要 select 不同日期范围的数据,具体取决于 运行 当前月份。我有一个存储过程,它将用户提供的日期(即 04/06/2020)接收到变量 @PPE
中。基于此日期的月份部分,我需要查询不同的范围,如财政年度(7 月 1 日 - 6 月 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) 开始,它将按如下方式进行,并继续...
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
表示财政月份数字,即 July = 1 ,August = 2,....June = 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
如果您的会计年度已经在格式中,那么您可以使用以下条件:
FISCAL_YEAR = CASE WHEN MONTH(@PPE) BETWEEN 1 AND 6 THEN YEAR(@PPE)
ELSE YEAR(@PPE)+1 END
根据您的数据,假设 2019 年 7 月至 2020 年 6 月被称为 2020 财年,上述条件应该有效。希望这有帮助。
我需要 select 不同日期范围的数据,具体取决于 运行 当前月份。我有一个存储过程,它将用户提供的日期(即 04/06/2020)接收到变量 @PPE
中。基于此日期的月份部分,我需要查询不同的范围,如财政年度(7 月 1 日 - 6 月 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) 开始,它将按如下方式进行,并继续...
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
表示财政月份数字,即 July = 1 ,August = 2,....June = 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
如果您的会计年度已经在格式中,那么您可以使用以下条件:
FISCAL_YEAR = CASE WHEN MONTH(@PPE) BETWEEN 1 AND 6 THEN YEAR(@PPE)
ELSE YEAR(@PPE)+1 END
根据您的数据,假设 2019 年 7 月至 2020 年 6 月被称为 2020 财年,上述条件应该有效。希望这有帮助。