首页 文章

将特定数字与特定月份相关联的T-SQL语法是什么?

提问于
浏览
0

我使用的是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

如果MONTH = 2,那么值= 8

...

如果MONTH = 12,那么值= 6

为简化起见,我将值1到12与我的会计年度相关联,该会计年度从7月开始到6月结束 . 也就是说,7月获得 Value 1,8月获得2 ....而6月获得12 .

如何将此逻辑添加到查询中?

4 回答

  • 1

    如果你已经将月值作为整数,那么这似乎只是 ((month+5)%12)+1 .

  • 0

    对于维度表,通常会在表格中添加一列或多列来表示此权限 . 所以,你会做类似的事情:

    alter table dbo.DateDimension add FiscalMonth tinyint;
    alter table dbo.DateDimension add FiscalYear smallint;
    

    ,相应地填充它,并更改任何关心财政期间的代码,以引用dbo.DateDimension中的信息 . 然后,如果(当!)你的公司改变你的定义只需要更新数据,代码应该神奇地做正确的事情 .

    此外,使用仅代码方法,您只有一个会计年度的概念 . 在财政年度的定义发生变化时,这一点很重要 . 现在,它是7月到6月 . 但是,让我们说它们将它改为9月到8月 . 当您使用代码确定会计年度和月份时,它看起来总是那样(或者,您需要破解并执行案例陈述) . 通过上面详细介绍的数据驱动方法,它完全在数据中,您无需更改任何代码,您可以准确地记录过去和未来 .

  • 0

    其他方式

    DECLARE @month INT = 12
    
    SELECT Isnull(NULLIF(CASE
                           WHEN @month < 6 THEN @month + 6
                           ELSE @month - 6
                         END, 0), 6)
    
  • 1

    在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...
    )
    

相关问题