查找任何财政年度内的季度期间
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 |
=====================================
我正在尝试在 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 |
=====================================