Hola, quisiera saber si alguien conoce algún sp que informe cantidad de materias aprobadas por alumno.
Gracias.
No hay algun stored procedure que informe cantidad de materias aprobadas de un alumno. Podes hacer una consulta a la vista de historia académica y buscar alli solo las materias aprobadas.
Te paso este código sql por si te sirve para lo que solicitas, filtra por año de reinscripcion y carrera:
select p.apellido, p.nombres, a.legajo, count (da.resultado) as cantidad, p.nro_documento, dc.te_per_lect
from sga_reinscripcion c
inner join sga_alumnos a on (c.legajo = a.legajo)
inner join sga_personas p on (a.nro_inscripcion = p.nro_inscripcion)
inner join sga_datos_censales dc on (a.nro_inscripcion = dc.nro_inscripcion)
inner join sga_detalle_acta da on (a.legajo = da.legajo)
where (c.carrera = '100') and
(c.anio_academico = '2011') and
(year (dc.fecha_relevamiento) = 2011) and
(da.resultado = 'A') and
(da.carrera = 100)
group by a.legajo, p.apellido, p.nombres, p.nro_documento, dc.te_per_lect
order by cantidad desc, p.apellido, p.nombres
Ricardo, en base a tu consulta le agrego algunos joins y condiciones faltantes. Tene cuidado porque por un lado al no tener todas las condiciones del join en cada relacion de las tablas ademas de tardarte mucho mas la consulta por no acceder por indice a las tablas, el resultado puede no ser el esperado ya que podrias mezclar datos (si por ejemplo hubiere alumnos en mas de una carrera con el mismo numero de legajo):
-- Carrera = 100
-- Año académico = 2011
select p.apellido, p.nombres, a.legajo, count (da.resultado) as cantidad, p.nro_documento, dc.te_per_lect
from sga_reinscripcion c
inner join sga_alumnos a on (c.unidad_academica = a.unidad_academica AND c.carrera = a.carrera AND c.legajo = a.legajo)
inner join sga_personas p on (a.unidad_academica = p.unidad_academica AND a.nro_inscripcion = p.nro_inscripcion)
inner join sga_datos_censales dc on (a.unidad_academica = p.unidad_academica AND a.nro_inscripcion = dc.nro_inscripcion)
inner join sga_detalle_acta da on (a.unidad_academica = da.unidad_academica AND a.carrera = da.carrera AND a.legajo = da.legajo)
inner join sga_actas_examen ae on (ae.unidad_academica = da.unidad_academica AND ae.tipo_acta = da.tipo_acta AND ae.acta = a.acta)
WHERE
c.unidad_academica = .... AND
c.carrera = '100' AND
c.anio_academico = 2011 AND
(year (dc.fecha_relevamiento) = 2011) and
ae.estado = 'C' AND -- Solo actas de examen cerradas
da.resultado = 'A' AND -- Examenes aprobados
da.estado = 'A' AND -- solo Examenes Activos (no examenes anulados/invalidados/dados de baja)
da.rectificado = 'N' AND -- Examenes que no estan rectificados
group by a.legajo, p.apellido, p.nombres, p.nro_documento, dc.te_per_lect
order by cantidad desc, p.apellido, p.nombres
Pero esta consulta recupera solo examenes aprobados por alumnos que estan reinscriptos en un año academico y una carrera.
No te servirá si los alumnos no se reinscriben.
Faltan las promociones y equivalencias de materias.
Por eso lo que podes hacer es una consulta en la historia académica que alli si esta todo: examenes, promociones, equivalencias (vw_hist_academica).
Tambien podes ver el código del procedure sp_histacademica.
SELECT
a.carrera,
d.nombre as carrera_nombre,
c.apellido || ' ' || c.nombres as alumno_nombre,
a.legajo as alumno_legajo,
year(a.fecha) as anio,
COUNT(*) as cant_mat_aprob_anio
FROM
vw_hist_academica as a,
sga_alumnos as b,
sga_personas as c,
sga_carreras as d
WHERE a.resultado = 'A' -- Materias aprobadas
AND b.unidad_academica = a.unidad_academica AND b.carrera = a.carrera AND b.legajo = a.legajo
AND c.unidad_academica = b.unidad_academica AND c.nro_inscripcion = b.nro_inscripcion
AND d.unidad_academica = b.unidad_academica AND a.carrera = b.carrera
AND a.unidad_academica = <codigo unidad_academica>
AND a.carrera = <codigo carrera>
AND year(a.fecha) = <año>
GROUP BY 1, 2, 3, 4, 5
ORDER BY 2, 3, 4, 5
Recordá tener actualizadas las estadisticas en la base periódicamente (UPDATE STATISTICS…)
Buenisimo, copiado. Gracias.