首页 文章

SQL SSIS派生列公式/语法问题

提问于
浏览
1

我有一个公式,我需要能够放入我的SSIS派生列......下面是..

if MONTH(Sls.SlsDt) + DAY(Sls.SlsDt) > MONTH(TODAY) + DAY(TODAY) then
    dYdtYr = 0.
  else
    dYdtYr = YEAR(Sls.SlsDt).

如何将上述业务逻辑放入SQL SSIS ETL派生列转换?

Derived Column是完成此任务的正确选择吗?

ETL包是从CSV到SQL登台表的导入,在此导入期间,我需要输出具有上述逻辑的新列(或替换现有的) .

输入行包含MONTH和DAY以及dYdtYr列 . 从某种意义上说,我需要根据上面的逻辑用新值覆盖dYdtYr值 .

2 回答

  • 0

    派生列设置为替换列使其替换为dYtdYr . 将以下内容放入表达式中:

    (MONTH(Sls.SlsDt) * 100 + DAY(Sls.SlsDT) > MONTH(getdate())*100 + DAY(getdate())) ? 0 : YEAR(Sls.SlsDt)
    

    这需要月份值(3月3日)乘以100得到300并将其加到日期值(今天为04)并且得到像0304这样的值 . 这将有效,以便一年中的任何一天或等于这个数值将小于该数字,今天之后的任何一天都会更大 . 请注意,这不考虑年份 . 这意味着3年前的12月31日将在dYtdYr获得0,但是从3年前的3月3日将(今天)获得SlsDt的年份 . 我猜想,如果这是你想要的结果,那么你正在努力 Build 年度YTD年度比较 .

  • 2

    如果您可以使用 TSQL ,则可以使用 CASE 语句

    CASE 
     WHEN MONTH(Sls.SlsDt) + DAY(Sls.SlsDt) > MONTH(getDate()) + DAY(getDate()) 
     THEN dYdtYr = 0
    ELSE
     dYdtYr = YEAR(Sls.SlsDt)
    END AS ColumnName
    

相关问题