Como se valida con el case, cuando el numero sea mayor a 0 (con lo cual numeros a 0 y en este caso el 0 se pone un 0 en el campo cuantos, asi mismo en el campo total) ya una vez que tenemos los numeros que si contarian y los que no los sumamos y ese seria el numero entre el cual dividiriamos el resultado de la suma de los numeros que manejas
--query que suma los valores que son mayores a 0 y los divide entre el numero de valores mayores a 0
SELECT CAST((SUM(total)/SUM(cuantos)) AS decimal(10,2))
FROM(
--query que valida que numeros son 0 y cuales no
SELECT case when numero>0 then 1 else 0 end cuantos,
case when numero>0 then numero else 0 end total
FROM #temp
) t1
donde irian tus datos....en donde viene el select a la tabla #temp
en tu caso el query quedaria mas o menos de esta manera:
Código SQL:
Ver originalCREATE TABLE #temp(
numero INT,
numero1 INT,
numero2 INT
)
INSERT INTO #temp VALUES (4,1,2)
INSERT INTO #temp VALUES (1,2,2)
INSERT INTO #temp VALUES (2,0,1)
INSERT INTO #temp VALUES (0,0,1)
INSERT INTO #temp VALUES (0,0,1)
INSERT INTO #temp VALUES (6,0,1)
SELECT CAST(
(SUM(total)+SUM(total1)+SUM(total2))
/
(SUM(cuantos)+SUM(cuantos1)+SUM(cuantos2)) AS DECIMAL(10,2))
FROM(
SELECT
CASE WHEN numero>0 THEN 1 ELSE 0 END cuantos,
CASE WHEN numero>0 THEN numero ELSE 0 END total,
CASE WHEN numero1>0 THEN 1 ELSE 0 END cuantos1,
CASE WHEN numero1>0 THEN numero1 ELSE 0 END total1,
CASE WHEN numero2>0 THEN 1 ELSE 0 END cuantos2,
CASE WHEN numero2>0 THEN numero2 ELSE 0 END total2
FROM #temp) t1
Aqui el resultado seria 2 porque es la suma de los valores 4+1+2+1+2+2+2+1+1+1+1+6=24 / 12(que son los valores que son mayores a 0)