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)
此方法不需要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)
我认为这样做最容易 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)
| 归档时间: |
|
| 查看次数: |
38803 次 |
| 最近记录: |