Hola estimado grupo, quisiera saber como hago para hacer calculos con
columnas generadas mediante sub-consultas, en este caso quiero sacar el
promedio de las columnas "PromPrimEtapa" y "PromSegEtapa", he intentado pero
me salta error que no son nombres de columnas, el sp es el sig:
SELECT N.IDMateria, N.IDEtapa, N.Curso, N.Orden, N.Nota, E.Descripcion as
Etapa, CONVERT(char(10),N.FechaExamen,103) AS FechaExamen,
M.Codigo, M.Nombre as Materia,
PromPrimEtapa = (SELECT ROUND(AVG(N.Nota+.0),2)
FROM NOTAS N
WHERE N.IDAlumno = @IDAlumno AND N.IDEtapa = 1 AND DATEPART(yyyy,
N.FechaExamen) = DATEPART(yyyy, GETDATE())),
PromSegEtapa = (SELECT ROUND(AVG(N.Nota+.0),2)
FROM NOTAS N
WHERE N.IDAlumno = @IDAlumno AND N.IDEtapa = 2 AND DATEPART(yyyy,
N.FechaExamen) = DATEPART(yyyy, GETDATE()))
FROM NOTAS N
INNER JOIN Materias M ON N.IDMateria = M.IDMateria
INNER JOIN Etapas E ON N.IDEtapa = E.IDEtapa
WHERE N.IDAlumno = @IDAlumno AND DATEPART(yyyy, N.FechaExamen) DATEPART(yyyy, GETDATE()) AND N.IDEtapa = 1 or N.IDEtapa = 2
ORDER BY M.Nombre, E.IDEtapa
Una forma seria hacer nuevamente las subconsultas y sobre estas el calculo,
pero no quiero hacer esto ya que el tiempo se eleva al doble. Ej:
PromFin = (
(SELECT ROUND(AVG(N.Nota+.0),2)
FROM NOTAS N
WHERE N.IDAlumno = @IDAlumno AND N.IDEtapa = 1 AND DATEPART(yyyy,
N.FechaExamen) = DATEPART(yyyy, GETDATE()))
+
(SELECT ROUND(AVG(N.Nota+.0),2)
FROM NOTAS N
WHERE N.IDAlumno = @IDAlumno AND N.IDEtapa = 2 AND DATEPART(yyyy,
N.FechaExamen) = DATEPART(yyyy, GETDATE())))/2
Saludos y gracias
Leer las respuestas