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 originalSELECT
(ISNULL(RingCrF1, 0) +
ISNULL(RingCrF2, 0) +
ISNULL(RingCrF3, 0) +
ISNULL(RingCrF4, 0) +
ISNULL(RingCrF5, 0) +
ISNULL(RingCrF6, 0) +
ISNULL(RingCrF7, 0) +
ISNULL(RingCrF8, 0) +
ISNULL(RingCrF9, 0) +
ISNULL(RingCrF10, 0) ) / (
CASE WHEN RingCrF1 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF2 IS NULL THEN 0 ELSE 1 END +
CASE WHEN RingCrF3 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF4 IS NULL THEN 0 ELSE 1 END +
CASE WHEN RingCrF5 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF6 IS NULL THEN 0 ELSE 1 END +
CASE WHEN RingCrF7 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF8 IS NULL THEN 0 ELSE 1 END +
CASE WHEN RingCrF9 IS NULL THEN 0 ELSE 1 END + CASE WHEN RingCrF10 IS NULL THEN 0 ELSE 1 END
) AS average_mark
FROM caljum02
WHERE FechaP = '20130310'
AND Rollo IN(19,10)
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 originalSELECT (RingCrF1+RingCrF2+RingCrF3+RingCrF4+RingCrF5)/5
FROM caljum02
WHERE FechaP = '20130310'
AND Rollo IN(19,10)
AND Maquina = 2
Pueden ayudarme a hacer esto ignorando los ceros para que no lo sume como un valor mas y no se divida?