2011-01-20 19 views
16

Estoy en el proceso de escribir un informe y estoy buscando obtener el valor promedio de una columna de edad. El problema es que no todas las filas tienen una edad.TSQL - Promedio de todos los valores en una columna que no son cero

Si los valores de la columna son 0 2 4, me gustaría devolver 3, no 2. No puedo simplemente excluir las filas cero con un DONDE como estoy usando otras columnas en esas filas. ¿Hay algo así como un tipo de función AvgIfNotZero?

Respuesta

38
SELECT 

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

AVG no tendrá en cuenta los valores NULL. O este

AVG (NULLIF(Value, 0)) 
0

, ( SELECT AVG (a) de

 (
     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

Se debe dar más contexto a una respuesta en lugar de sólo dejar caer un bloque de código que el PO o futuros lectores no entiendan. – zgue

Cuestiones relacionadas