Ver Mensaje Individual
  #3 (permalink)  
Antiguo 11/03/2013, 16:51
th3r0rn
 
Fecha de Ingreso: noviembre-2007
Mensajes: 504
Antigüedad: 17 años
Puntos: 2
Respuesta: Como saco un promedio Average de varias columnas

Hola,
Lo que quiero es calcular las 5 primeras columnas de una linea, es decir, si hacemos un SELECT TOP 1 * FROM MyTbla
Nos traera una sola linea.
yo lo intente de esta forma:
Código SQL:
Ver original
  1. SELECT
  2. (ISNULL(RingCrF1, 0) +
  3. ISNULL(RingCrF2, 0) +
  4. ISNULL(RingCrF3, 0) +
  5. ISNULL(RingCrF4, 0) +
  6. ISNULL(RingCrF5, 0) +
  7. ISNULL(RingCrF6, 0) +
  8. ISNULL(RingCrF7, 0) +
  9. ISNULL(RingCrF8, 0) +
  10. ISNULL(RingCrF9, 0) +
  11. ISNULL(RingCrF10, 0)  ) / (
  12.         CASE WHEN RingCrF1 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF2 IS NULL THEN 0 ELSE 1 END +
  13.         CASE WHEN RingCrF3 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF4 IS NULL THEN 0 ELSE 1 END +
  14.         CASE WHEN RingCrF5 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF6 IS NULL THEN 0 ELSE 1 END +
  15.         CASE WHEN RingCrF7 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF8 IS NULL THEN 0 ELSE 1 END +
  16.         CASE WHEN RingCrF9 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF10 IS NULL THEN 0 ELSE 1 END
  17.        
  18.     ) AS average_mark
  19. FROM caljum02
  20.     WHERE FechaP = '20130310'
  21.     AND Rollo IN(19,10)
  22.     AND Maquina = 2

El problema es que no me ignora los ceros, y la formula de un average es la suma de todos los elementos divididos entre el numero de elementos, pero si tengo 10 columnas de las cuales solo 5 tienen registros? me lo dividira entre 10, cuando deberia de ser entre 5. algo como esto:
Código SQL:
Ver original
  1. SELECT (RingCrF1+RingCrF2+RingCrF3+RingCrF4+RingCrF5)/5
  2.     FROM caljum02
  3.     WHERE FechaP = '20130310'
  4.     AND Rollo IN(19,10)
  5.     AND Maquina = 2

Pueden ayudarme a hacer esto ignorando los ceros para que no lo sume como un valor mas y no se divida?