2011-01-20 14 views
16

Jestem w trakcie pisania raportu i szukam średniej wartości kolumny wieku. Problem polega na tym, że nie wszystkie wiersze mają wiek.TSQL - Średnia wszystkich wartości w kolumnie, które nie są zerowe

Jeśli wartości dla kolumny wynoszą 0 2 4, chciałbym, aby 3 zostały zwrócone, a nie 2. Nie mogę po prostu wykluczyć zerowych wierszy za pomocą WHERE, ponieważ używam innych kolumn w tych wierszach. Czy istnieje coś takiego jak funkcja typu AvgIfNotZero?

Odpowiedz

38
SELECT 

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

AVG nie będzie uwzględniać wartości NULL. Albo ten

AVG (NULLIF(Value, 0)) 
0

( SELECT AVG (a) od

 (
     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] 
+0

Należy dać więcej kontekstu do odpowiedzi, zamiast po prostu spada blok kodu, że OP lub przyszłych czytelników nie może zrozumieć. – zgue

Powiązane problemy