列
1
2
3
4
5
6
7
8
9
10
我具有此列的平均值,我想将字符串“ 0和平均值”之间的数字替换为“低于平均值”
REPLACE(column,"[0,avg]","below")
->但不起作用
任何想法如何实现这一点?
一般方法是,您将需要两次使用源数据。首次计算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
将列的值强制转换为字符串数据类型,以便表达式的两个结果均为字符串。