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