查找任何财政年度内的季度期间

Find the quarterly periods within any Financial Year

我正在尝试在 SSRS 中生成一份报告,该报告向我展示了一个财政年度内每个季度的一些工作。我将每个公司的 FY days/months 存储在数据库中,我使用查询来查找当前或以前的 FY start/end 日期。

DECLARE @FirstDate DATETIME
DECLARE @LastDate DATETIME
DECLARE @CurrentDate DATETIME
DECLARE @CompanyID BIGINT

SET @CurrentDate = GETDATE()
SET @CompanyID = 631


SELECT  @FirstDate = CASE WHEN DATEFROMPARTS(Year(@CurrentDate), Month(c.FinancialYearStart), Day(c.FinancialYearStart)) <= GETDATE() THEN  
                                                              -- We are in the right Year
                                                              DATEFROMPARTS(Year(@CurrentDate), Month(c.FinancialYearStart), Day(c.FinancialYearStart))
                                                       ELSE
                                                              -- we need to go back a year
                                                              DATEFROMPARTS(Year(@CurrentDate)-1, Month(c.FinancialYearStart), Day(c.FinancialYearStart))
                                                       END
       , @LastDate = CASE WHEN DATEFROMPARTS(Year(@CurrentDate), Month(c.FinancialYearStart), Day(c.FinancialYearStart)) <= GETDATE() THEN  
                                                              -- We are in the right Year
                                                              DATEADD(day, -1, DATEADD(year, 1, DATEFROMPARTS(Year(@CurrentDate), Month(c.FinancialYearStart), Day(c.FinancialYearStart))))
                                                       ELSE
                                                              -- we need to go back a year
                                                              DATEADD(day, -1, DATEADD(year, 1, DATEFROMPARTS(Year(@CurrentDate)-1, Month(c.FinancialYearStart), Day(c.FinancialYearStart))))
                                                       END
FROM tCompany c
WHERE c.ID = @CompanyID

如何从@FirstDate 查询每个季度的 FY?

例如如果一家公司的财年是 01/04 - 31/03,我如何确定每个季度月份?

第 1 季度 - 4 月、5 月、6 月 第 2 季度 - 7 月、8 月、9 月 第 3 季度 - 10 月、11 月、12 月 第 4 季度 - 1 月、2 月、3 月

通常人们会将财政季度专门定义为日历上的一个字段 table,因为它们通常不会按预期运作 - 例如 4-4-5 或 4-5-4 会计。

如果您只是查看日历月份,则使用 CASE WHEN 表达式和 MONTH() 函数可能会奏效。您需要弄清楚该特定财政年度的 "starting" 月份是什么,然后使用它将 MONTH() 转换为财政月份 1 - 12,然后 CASE WHEN fisalMonth in (1,2,3 ) ...等等

不过真的 - 使用日历 table。请在此处查看 Aaron Bertrand 的文章: https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/

第 1 步:创建 @FirstDate 变量

DECLARE @FirstDate DATETIME = '05/31/2015'

第 2 步:创建 SQL 以查找每个季度

SELECT
    DATEPART(MONTH,@FirstDate) AS [Q1 Start],
    DATEPART(MONTH, DATEADD(MONTH, 3, @FirstDate)) AS [Q2 Start],
    DATEPART(MONTH, DATEADD(MONTH, 6, @FirstDate)) AS [Q3 Start],
    DATEPART(MONTH, DATEADD(MONTH, 9, @FirstDate)) AS [Q4 Start]

输出:

=====================================
|Q1 Start|Q2 Start|Q3 Start|Q4 Start|
=====================================
|5       |8       |11      |2       |
=====================================