Sacar promedio en select

06/04/2005 - 14:38 por Matías | Informe spam
Hola grupo, tengo el siguiente sp en el cual saco los promedios de las
etapas 1 y 2:

SELECT M.Nombre AS Materia, N.IDEtapa,
CASE WHEN N.IDEtapa = 1 or N.IDEtapa= 2 THEN ROUND(AVG(N.Nota+.0),2) ELSE 0
END AS Promedio
FROM NOTAS N
INNER JOIN Materias M ON N.IDMateria = M.IDMateria
WHERE N.IDAlumno = @IdAlumno AND (N.IDEtapa = 1 or N.IDEtapa = 2)
AND DATEPART(yyyy, N.FechaExamen) = DATEPART(yyyy, GETDATE())
GROUP BY M.Nombre, N.IDEtapa
ORDER BY M.Nombre, N.IDEtapa

Devuelve:

Materia IdEtapa Promedio
BIOLOGÍA I 1 6.33
BIOLOGÍA I 2 7.50
HISTORIA I 1 6.00
HISTORIA I 2 4.33
DIBUJO I 1 7.00
EDUCACIÓN FÍSICA I 1 7.50

Y yo quiero que devuelva lo mismo pero con un promedio FINAL ( o sea por ej
para Biologia (6.33+7.50)/2=6.92 )

Materia IdEtapa Promedio PromedioFINAL
BIOLOGÍA I 1 6.33 6.92
BIOLOGÍA I 2 7.50 6.92
HISTORIA I 1 6.00 5.16
HISTORIA I 2 4.33 5.16
DIBUJO I 1 7.00 7.00
EDUCACIÓN FÍSICA I 1 7.50 7.50

Como puedo hacer esto, ademas tengo que tener en cuenta que puede haber
promedio para una sola etapa.
Saludos y gracias

Las tablas son:

NOTAS MATERIAS
-
IdAlumno IdMateria
IdMateria Nombre
IdEtapa
Curso
Orden
Nota
FechaExamen
 

Leer las respuestas

#1 Alejandro Mesa
06/04/2005 - 15:05 | Informe spam
Matías,

Chequea el operador ROLLUP en los libros en linea. No expongo un ejemplo
relacionado a tu ambiente porque no posteastes data de ejemplo, asi que usare
la bd Northwind.

Ejemplo:

customer

use northwind
go

select
customerid,
year(orderdate) as [año],
count(*) as num_de_ordenes
from
orders as o
group by
customerid,
year(orderdate) with rollup
order by
case when grouping(customerid) = 1 then 1 else 0 end,
customerid,
(select max(year(oh.orderdate)) from orders as oh where oh.customerid =
o.customerid)
go


AMB


"Matías" wrote:

Hola grupo, tengo el siguiente sp en el cual saco los promedios de las
etapas 1 y 2:

SELECT M.Nombre AS Materia, N.IDEtapa,
CASE WHEN N.IDEtapa = 1 or N.IDEtapa= 2 THEN ROUND(AVG(N.Nota+.0),2) ELSE 0
END AS Promedio
FROM NOTAS N
INNER JOIN Materias M ON N.IDMateria = M.IDMateria
WHERE N.IDAlumno = @IdAlumno AND (N.IDEtapa = 1 or N.IDEtapa = 2)
AND DATEPART(yyyy, N.FechaExamen) = DATEPART(yyyy, GETDATE())
GROUP BY M.Nombre, N.IDEtapa
ORDER BY M.Nombre, N.IDEtapa

Devuelve:

Materia IdEtapa Promedio
BIOLOGÍA I 1 6.33
BIOLOGÍA I 2 7.50
HISTORIA I 1 6.00
HISTORIA I 2 4.33
DIBUJO I 1 7.00
EDUCACIÓN FÍSICA I 1 7.50

Y yo quiero que devuelva lo mismo pero con un promedio FINAL ( o sea por ej
para Biologia (6.33+7.50)/2=6.92 )

Materia IdEtapa Promedio PromedioFINAL
BIOLOGÍA I 1 6.33 6.92
BIOLOGÍA I 2 7.50 6.92
HISTORIA I 1 6.00 5.16
HISTORIA I 2 4.33 5.16
DIBUJO I 1 7.00 7.00
EDUCACIÓN FÍSICA I 1 7.50 7.50

Como puedo hacer esto, ademas tengo que tener en cuenta que puede haber
promedio para una sola etapa.
Saludos y gracias

Las tablas son:

NOTAS MATERIAS
-
IdAlumno IdMateria
IdMateria Nombre
IdEtapa
Curso
Orden
Nota
FechaExamen



Preguntas similares