Hola a todos, construí el siguientes sp, lo que hace es traerme un listado
de alumnos que no aprobaron materias en las
distintas etapas, esta funcionando bien(creo), pero el tema es que me hace
falta filtrar los alumnos solo tengan dos o mas materias en el resultado del
sp.
El sp devuelve(resumido):
Alumno Materia
-
GOMEZ, NELSON BIOLIGIA
GOMEZ, NELSON QUIMICA
SIMPSON, BARTOLOMEO FISICA
Me hace falta que solo devuelva:
Alumno Materia
-
GOMEZ, NELSON BIOLIGIA
GOMEZ, NELSON QUIMICA
SELECT * FROM (SELECT A.Apellidos+', '+ A.Nombres as Alumno, A.Legajo,
A.NroDocumento, N.IDAlumno, N.IDMateria, M.Codigo, M.Nombre as Materia, --
trae alum q no aprobaron porq no les dio el PromFinal o el Prom2Et
Prom2Et = (SELECT ROUND(AVG(CAST(N.Nota as FLOAT)),2)
FROM NOTAS N
WHERE N.IDEtapa = 2 AND N.IDAlumno = A.IDAlumno
AND DATEPART(yyyy, N.FechaExamen) = @Anio AND A.Curso = @Curso),
ROUND(((SELECT ROUND(AVG(CAST(N.Nota as FLOAT)),2)
FROM NOTAS N
WHERE N.IDEtapa = 1 AND N.IDAlumno = A.IDAlumno
AND DATEPART(yyyy, N.FechaExamen) = @Anio AND A.Curso = @Curso)
+
(SELECT ROUND(AVG(CAST(N.Nota as FLOAT)),2)
FROM NOTAS N
WHERE N.IDEtapa = 2 AND N.IDAlumno = A.IDAlumno
AND DATEPART(yyyy, N.FechaExamen) = @Anio AND A.Curso = @Curso))/2, CASE
WHEN @RVP = 1 THEN 0 ELSE 2 END) PromFinal
FROM NOTAS N
INNER JOIN Materias M ON N.IDMateria = M.IDMateria
INNER JOIN Etapas E ON N.IDEtapa = E.IDEtapa
INNER JOIN Alumnos A ON N.IDAlumno = A.IDAlumno
INNER JOIN vw_ultimo_estado_alu V ON V.IDAlumno = A.IDAlumno
WHERE DATEPART(yyyy, N.FechaExamen) = @Anio
AND (N.IDEtapa = 1 or N.IDEtapa = 2) AND A.Curso = @Curso AND V.IdEstado 2
GROUP BY A.Apellidos, A.Nombres, A.Legajo, A.NroDocumento, N.IDAlumno,
N.IDMateria, M.Codigo, M.Nombre, A.IDAlumno, A.Curso, A.IDAlumno, V.IdEstado
) AS Coloquio
WHERE (PromFinal < @NotaMin OR Prom2Et < @NotaMin)
AND IDAlumno NOT IN
(SELECT N.IDAlumno-- indica los alumnos q se presentaron a rendir en
coloquio y aprobaron.
FROM NOTAS N
INNER JOIN Etapas E ON N.IDEtapa = E.IDEtapa
INNER JOIN Alumnos A ON N.IDAlumno = A.IDAlumno
INNER JOIN vw_ultimo_estado_alu V ON V.IDAlumno = A.IDAlumno
WHERE DATEPART(yyyy, N.FechaExamen) = @Anio
AND N.IDEtapa = 3 AND A.Curso = @Curso
AND V.IdEstado = 2 AND N.Nota >= @NotaMin
GROUP BY N.IDAlumno)
AND IDAlumno NOT IN
(SELECT N.IDAlumno-- indica los alumnos q se presentaron a rendir en
Marzo y aprobaron.
FROM NOTAS N
INNER JOIN Etapas E ON N.IDEtapa = E.IDEtapa
INNER JOIN Alumnos A ON N.IDAlumno = A.IDAlumno
INNER JOIN vw_ultimo_estado_alu V ON V.IDAlumno = A.IDAlumno
WHERE N.IDEtapa = 4 AND A.Curso = @Curso
AND V.IdEstado = 2 AND N.Nota >= @NotaMin
GROUP BY N.IDAlumno)
Aunque sea que lo pueda resolver con un cursor.
Las tablas prinsipales son:
Alumno: *IDAlumno, (demas Campos)
Notas: *IDAlumno, *IDMateria, *IDEtapa, *Curso, Nota, FechaExamen
Materias:*IDMateria, (demas Campos)
(* campo clave)
Muchas Gracias. Perdon pero no pude ponerme a resumir un poco el sp.
Leer las respuestas