2011-01-20 3 views
16

Sono in procinto di scrivere un report e sto cercando di ottenere il valore medio di una colonna di età. Il problema è che non tutte le file hanno un'età.TSQL - Media di tutti i valori in una colonna diversa da zero

Se i valori per la colonna sono 0 2 4 vorrei 3 restituiti, non 2. Non posso semplicemente escludere le righe zero con un WHERE mentre sto usando altre colonne in quelle righe. Esiste un tipo di funzione AvgIfNotZero?

risposta

38
SELECT 

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

AVG non prenderà in considerazione i valori NULL. O questo

AVG (NULLIF(Value, 0)) 
0

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

Si dovrebbe dare più contesto per una risposta piuttosto che far cadere un blocco di codice che il PO o futuri lettori non possono capire. – zgue