0

次のような列の平均を返すストアドプロシージャがSQLServerにあります。

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 
4

1 に答える 1

1

NULL値の処理は、少し面倒です。列のすべての値がNULLになる可能性がある場合、以下は平均を計算します。

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
于 2012-10-01T18:31:32.200 に答える