SSIS派生列中的替换功能

时间:2019-12-10 14:32:58

标签: ssis

1
2
3
4
5
6
7
8
9
10

我有此列的平均值, 我想将“ 0和平均值”之间的数字替换为“低于平均值”的字符串

REPLACE(column,"[0,avg]","below")->但不起作用

有什么想法要实现这一点吗?

1 个答案:

答案 0 :(得分:1)

一般方法是您将需要两次使用源数据。第一次计算column中所有值的平均值。由于您没有指定任何内容,因此到达那里的可能性是无限的。

如果源系统是rdbms,则只需在源查询中导出消息即可。

SELECT
    D.[column]
,   AVG(D.[column]) OVER (ORDER BY(SELECT NULL)) AS column_avg
,   CASE WHEN AVG(D.[column]) OVER (ORDER BY(SELECT NULL)) >= D.[column] THEN CAST(D.[column] AS varchar(10))
    ELSE 'below'
    END AS ColumnAvgText
FROM
(
    VALUES(1)
    ,   (2)
    ,   (3)
    ,   (4)
    ,   (5)
    ,   (6)
    ,   (7)
    ,   (8)
    ,   (9)
    ,   (10)

)D([column]);

否则,您将需要汇总该列的平均值,然后将其存储到变量中-我假设@[User::MyAverage]

然后在现有数据流中,添加一个名为ColumnAvgText的新列。此处的数据类型必须从原始数字类型更改为字符串,因为您不能在数字字段中输入“以下”一词。

其语法类似于

(@[User::MyAverage >= column) ? ((DT_WSTR, 20) column) : "below"

(DT_WSTR, 20) column将column的值强制转换为字符串数据类型,以便表达式的两个结果均为字符串。