替换SSIS派生列中的函数

问题描述 投票:-1回答:1

1
2
3
4
5
6
7
8
9
10

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

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

任何想法如何实现这一点?

ssis
1个回答
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的新列。此处的数据类型必须从原始数字类型更改为字符串,因为您不能在数字字段中输入单词“ below”。

其语法类似于

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

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

© www.soinside.com 2019 - 2024. All rights reserved.