我正在使用SQL Server 2014,我有一个名为“DateDimension”的表,其中包含2001年1月1日至2020年12月31日的所有日期。
我需要在Power Pivot模型中使用此表的内容(如下所示)。
Day Month Year Date
1 7 2016 7/1/2016 12.00.00 AM
我的SQL查询如下:
SELECT * FROM DateDimension
我需要在查询的输出中添加一个新列(我们称之为“排序”),它将执行以下操作:
如果MONTH = 1,那么值= 7
IF MONTH = 2,THEN VALUE = 8
...
IF MONTH = 12,THEN VALUE = 6
为了简化,我将值1到12与我的会计年度相关联,该会计年度从7月开始到6月结束。也就是说,7月获得价值1,8月获得2 ....而6月获得12。
如何将此逻辑添加到我的查询中?
答案 0 :(得分:1)
如果您已将月份值作为整数,那么这似乎只是((month+5)%12)+1
。
答案 1 :(得分:1)
对于维度表,在表格中添加一列或多列以表示此权限是很常见的。所以,你会做类似的事情:
alter table dbo.DateDimension add FiscalMonth tinyint;
alter table dbo.DateDimension add FiscalYear smallint;
,相应地填充它,并更改任何关心财政期间的代码,以引用dbo.DateDimension中的信息。然后,如果(当!)你的公司改变你的定义只需要更新数据,代码应该神奇地做正确的事情。
此外,使用仅代码方法,您只有一个会计年度的概念。在财政年度的定义发生变化时,这一点很重要。现在,它是7月到6月。但是,让我们说他们把它改为9月到8月。当您使用代码确定会计年度和月份时,它看起来总是那样(或者,您需要破解并执行案例陈述)。通过上面详细介绍的数据驱动方法,它完全包含在数据中,您不需要更改任何代码,您就可以准确地记录过去和未来。
答案 2 :(得分:0)
在SQL中,您可以使用以下DATEADD
来实现它:
declare @date datetime = '2016-12-01 02:01:01'
select month(dateadd(mm,6,@date)) as [Month]
或者,如果您想通过SSRS表达式实现它,可以在以下内容中使用SWITCH
:
=SWITCH(Fields!Month.Value = 1, 7,
Fields!Month.Value = 2, 8,
Fields!Month.Value = 3, 9,
and so on...
)
答案 3 :(得分:0)
另一种方式
DECLARE @month INT = 12
SELECT Isnull(NULLIF(CASE
WHEN @month < 6 THEN @month + 6
ELSE @month - 6
END, 0), 6)