我有一个包含多个值列的表。值可以是整数或 NULL。例子:
LFNR WertA WertB WertC
1 1 1 2
2 100 100 200
3 NULL 1 NULL
5 1 NULL 1
6 0 0 0
40 NULL 1 NULL
我需要得到每列的前 3 个值不是 NULL 的平均值。对于单个列,我通过以下语句获得所需的平均值:
SELECT AVG(WertA) FROM (SELECT TOP 3 WertA FROM synta_rollmw WHERE WERTA IS NOT NULL ORDER BY lfnr DESC)u
要在 SSRS 中使用这个值,我的想法是使用这样的函数:
SELECT dbo.func_avg_Wert(WertA), dbo.func_avg_Wert(WertB), ...
这是我的函数代码:
CREATE FUNCTION dbo.func_avg_Wert (@col_in varchar(15))
RETURNS int
AS
BEGIN
DECLARE @rollmw int
DECLARE @sqlquery VARCHAR(1000)
SET @sqlquery = ('SELECT AVG(@col_in) FROM (SELECT TOP 3 @col_in FROM synta_rollMW WHERE @col_in IS NOT NULL ORDER BY lfnr DESC)u')
EXEC @sqlquery
RETURN @rollmw
END
GO
但是,如果我尝试使用该功能,我会得到“列名 'WertA' 无效。有什么问题或有更好的方法吗?谢谢