1

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

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

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

派生列是完成此任务的正确选择吗?

ETL 包是从 CSV 到 SQL 临时表的导入,在此导入期间,我需要输出一个已实现上述逻辑的新列(或替换现有列)。

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

4

2 回答 2

2

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

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

这需要月份值(3 月为 03)将其乘以 100 得到 300,并将其添加到日期值(今天为 04)并得到一个类似 0304 的值。这将起作用,因此一年中的任何一天之前或等于该值将小于该数字,并且今天之后的一年中的任何一天都将更大。请注意,这不考虑年份。这意味着 3 年前的 12 月 31 日将在 dYtdYr 中获得 0,但 3 年前的 3 月 3 日将(今天)获得 SlsDt 的年份。我猜想,如果这是您想要的结果,那么您正在尝试建立一个 YTD 年同比比较。

于 2013-03-04T20:26:17.737 回答
0

如果可以使用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
于 2013-03-04T20:05:32.100 回答