Ver Mensaje Individual
  #9 (permalink)  
Antiguo 12/03/2013, 10:44
Avatar de Libras
Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 18 años, 3 meses
Puntos: 774
Respuesta: Como saco un promedio Average de varias columnas

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 original
  1. CREATE TABLE #temp(
  2. numero INT,
  3. numero1 INT,
  4. numero2 INT
  5. )
  6.  
  7. INSERT INTO #temp VALUES (4,1,2)
  8. INSERT INTO #temp VALUES (1,2,2)
  9. INSERT INTO #temp VALUES (2,0,1)
  10. INSERT INTO #temp VALUES (0,0,1)
  11. INSERT INTO #temp VALUES (0,0,1)
  12. INSERT INTO #temp VALUES (6,0,1)
  13.  
  14. SELECT CAST(
  15. (SUM(total)+SUM(total1)+SUM(total2))
  16. /
  17. (SUM(cuantos)+SUM(cuantos1)+SUM(cuantos2)) AS DECIMAL(10,2))
  18.  FROM(
  19.  
  20. SELECT
  21. CASE WHEN numero>0 THEN 1 ELSE 0 END cuantos,
  22. CASE WHEN numero>0 THEN numero ELSE 0 END total,
  23. CASE WHEN numero1>0 THEN 1 ELSE 0 END cuantos1,
  24. CASE WHEN numero1>0 THEN numero1 ELSE 0 END total1,
  25. CASE WHEN numero2>0 THEN 1 ELSE 0 END cuantos2,
  26. CASE WHEN numero2>0 THEN numero2 ELSE 0 END total2
  27.  
  28.  
  29. 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)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 12/03/2013 a las 10:54