显示某个财政年度的某个季度

Mic*_*l A 5 sql t-sql sql-server finance sql-server-2008

我正在尝试构建一个查询,它将映射两列,一个是表格中的日期,第二列是一个别名,用于显示日期所属的季度和财政年度.

不幸的是,我没有足够的SQL知识来知道从哪里开始.我知道,我会用的组合做到这一点getdate(),并dateadd(MONTH,,)却没有,我已经把已接近工作.

为了进一步复杂化,澳大利亚的财政年度将从6月1日至6月30日,因此2012财政年度的第一季将从2012年7月1日开始.

我可以在没有声明的情况下执行此操作,但是我更愿意在声明中将其用于SSRS报告和C#应用程序中,这将使维护变得更加容易.

Ada*_*lph 12

这应该工作: -

SELECT
    MyDate,
    CASE
        WHEN MONTH(MyDate) BETWEEN 1  AND 3  THEN convert(char(4), YEAR(MyDate) - 1) + 'Q3'
        WHEN MONTH(MyDate) BETWEEN 4  AND 6  THEN convert(char(4), YEAR(MyDate) - 1) + 'Q4'
        WHEN MONTH(MyDate) BETWEEN 7  AND 9  THEN convert(char(4), YEAR(MyDate) - 0) + 'Q1'
        WHEN MONTH(MyDate) BETWEEN 10 AND 12 THEN convert(char(4), YEAR(MyDate) - 0) + 'Q2'
    END AS Quarter
FROM
    MyTable
Run Code Online (Sandbox Code Playgroud)

输出: -

MyDate        Quarter
----------    --------
2011-01-01    "2010Q3"
2011-04-01    "2010Q4"
2011-07-01    "2011Q1"
2011-10-01    "2011Q2"
Run Code Online (Sandbox Code Playgroud)


Gra*_*ger 7

此方法不需要CASE语句,适用于任何月度会计日历.

DECLARE @firstMonthOfFiscalQ1 int = 7; --1=January
SELECT DateColumn
    , FLOOR(((12 + MONTH(DateColumn) - @firstMonthOfFiscalQ1) % 12) / 3 ) + 1 AS FiscalQuarter
    FROM SomeTable 
    WHERE 1=1;
Run Code Online (Sandbox Code Playgroud)


Exp*_*lls 6

我认为这样做最容易 CASE

SELECT
   date
   , CASE
         WHEN MONTH(date) BETWEEN 7 AND 9 THEN 'First Quarter'
         WHEN MONTH(date) BETWEEN 10 AND 12 THEN 'Second Quarter'
         WHEN MONTH(date) BETWEEN 1 AND 3 THEN 'Third Quarter'
         WHEN MONTH(date) BETWEEN 4 AND 6 THEN 'Fourth Quarter'
     END AS quarter
FROM Stuff
Run Code Online (Sandbox Code Playgroud)

  • 让我感到可笑的愚蠢 - 非常感谢,非常干净. (2认同)