Sql server 2008 获取SQL Server中存储过程中一行的平均值
我在SQL Server中有一个存储过程,它返回某些列的平均值,如下所示:Sql server 2008 获取SQL Server中存储过程中一行的平均值,sql-server-2008,tsql,stored-procedures,Sql Server 2008,Tsql,Stored Procedures,我在SQL Server中有一个存储过程,它返回某些列的平均值,如下所示: ALTER PROCEDURE [dbo].[Financial] AS BEGIN SELECT avg([aa ]) as 'aaa', avg([bb]) as 'bbb', avg([cc ]) as 'ccc', avg([dd]) as 'ddd', avg([ee]) as 'eee', avg([
ALTER PROCEDURE [dbo].[Financial]
AS
BEGIN
SELECT
avg([aa ]) as 'aaa',
avg([bb]) as 'bbb',
avg([cc ]) as 'ccc',
avg([dd]) as 'ddd',
avg([ee]) as 'eee',
avg([ ff]) as 'fff'
FROM [FIN]
END
现在我的问题是,我想得到这个过程结果的平均值,我的意思是这个当前过程给我一行,它包含某个列的平均值。现在我想得到这一行的平均值!我能做什么
让我进一步解释一下,上述程序的结果可能是:
4,7,8,9,6
下一步我要的是
4,7,8,9,6
处理空值有点痛苦。如果一列中的所有值都可以为空,则以下内容将计算平均值:
SELECT aaa, bbb, ccc, ddd, eee, fff,
((coalesce(aaa, 0) + coalesce(bbb, 0) + coalesce(ccc, 0) + coalesce(ddd, 0) +
coalesce(eee, 0) + coalesce(fff, 0)) /
((case when aaa is null then 0.0 else 1.0 end) +
(case when bbb is null then 0.0 else 1.0 end) +
(case when ccc is null then 0.0 else 1.0 end) +
(case when ddd is null then 0.0 else 1.0 end) +
(case when eee is null then 0.0 else 1.0 end) +
(case when fff is null then 0.0 else 1.0 end)
)
) AS Average
FROM (
SELECT
avg([aa ]) as 'aaa',
avg([bb]) as 'bbb',
avg([cc ]) as 'ccc',
avg([dd]) as 'ddd',
avg([ee]) as 'eee',
avg([ ff]) as 'fff'
FROM [FIN]
) AS Averages
请注意,您可能希望使用表值函数或视图,而不是存储过程。这将允许您在另一个查询中直接使用结果。+1-这比我的好得多;我对空值有太多的假设。@LittleBobbyTables:(我告诉过你,当我这样说的时候:选择aaa,bbb,ccc,ddd,eee,fff,((coalesce(aaa,0)+coalesce(bbb,0),…sql不知道aaa和bbb,…)(@Sara…当我用fin as运行前面的
(选择1作为[aa],选择2作为[bb],选择2.5作为[cc],选择3作为[dd]),4作为[ee],5作为[ff])
,它有效。它对你有效吗?