web-dev-qa-db-ja.com

TSQL-ゼロではない列のすべての値の平均

レポートを作成中です。年齢列の平均値を取得しようとしています。問題は、すべての行に年齢があるわけではないということです。

列の値が02 4の場合、2ではなく3を返します。これらの行で他の列を使用しているため、WHEREでゼロ行を単純に除外することはできません。 AvgIfNotZeroタイプの関数のようなものはありますか?

21
Justin808
SELECT

    AVG (CASE WHEN Value <> 0 THEN Value ELSE NULL END)
    ....

AVGはNULL値を考慮しません。またはこれ

    AVG (NULLIF(Value, 0))
44
gbn

、(SELECT AVG(a)FROM

        (
        SELECT NULLIF([Column1], 0)
            UNION ALL
        SELECT  NULLIF([Column2], 0)
            UNION ALL
        SELECT  NULLIF([Column3], 0)
            UNION ALL
        SELECT  NULLIF([Column4], 0)
        ) T (a)
    ) AS [4 Column Average]
1
Milo Woodward