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

时间:2015-11-12 15:00:06

标签: sql sql-server-2014

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

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?

E.g。如果公司FY是01/04 - 31/03我怎样才能确定每个季度?

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

2 个答案:

答案 0 :(得分:0)

通常会将财务季度专门定义为日历表中的字段,因为它们通常不会按预期运行 - 例如4-4-5或4-5-4会计。

如果您只是查看日历月,可以使用CASE WHEN表达式和MONTH()函数。您需要弄清楚该特定会计年度的“起始”月份,然后使用该月份将MONTH()转换为1 - 12财政月份,然后将(1,3,3)中的fisalMonth转换为CASE WHEN。 ..等等。

实际上 - 使用日历表。请参阅Aaron Bertrand的文章: https://www.mssqltips.com/sqlservertip/4054/creating-a-date-dimension-or-calendar-table-in-sql-server/

答案 1 :(得分:0)

第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       |
=====================================