CREATE OR ALTER PROCEDURE CONDICIONALES_DETALLE_SP (
    E_NRO_ALUMNO INTEGER,
    E_NRO_PLAN INTEGER)
RETURNS (
    CURSO INTEGER,
    NOTA INTEGER)
AS
BEGIN
  FOR
    SELECT
        MATERIAS.CURSO,
        MAX(ACTAS_RESULTADOS.NOTA) AS NOTA
      FROM ALUMNOS_MATERIAS
      INNER JOIN ALUMNOS_PLANES ON ALUMNOS_PLANES.NRO_ALUMNO_PLAN = ALUMNOS_MATERIAS.NRO_ALUMNO_PLAN
      INNER JOIN MATERIAS ON MATERIAS.NRO_MATERIA = ALUMNOS_MATERIAS.NRO_MATERIA
      INNER JOIN PLANES ON PLANES.NRO_PLAN = MATERIAS.NRO_PLAN
      LEFT  JOIN ACTAS_RESULTADOS ON ACTAS_RESULTADOS.NRO_ALUMNO_MATERIA = ALUMNOS_MATERIAS.NRO_ALUMNO_MATERIA
      WHERE
        ALUMNOS_PLANES.NRO_ALUMNO = :E_NRO_ALUMNO AND
        PLANES.NRO_PLAN = :E_NRO_PLAN AND
        (
          ALUMNOS_MATERIAS.EQUIVALENCIA = 3
          OR
          (
            (ALUMNOS_MATERIAS.EQUIVALENCIA = 1 OR ALUMNOS_MATERIAS.EQUIVALENCIA = 4) AND
            ACTAS_RESULTADOS.NOTA >= PLANES.NOTA_APROBACION
          )
          OR
          (
            ALUMNOS_MATERIAS.EQUIVALENCIA = 2 AND
            ACTAS_RESULTADOS.NOTA >= PLANES.NOTA_APROBACION_LIBRE
          )
          OR
          (
            ALUMNOS_MATERIAS.EQUIVALENCIA = 5 AND
            ACTAS_RESULTADOS.NOTA >= PLANES.NOTA_PROMOCION
          )
        ) AND
        NOT MATERIAS.ACTIVA AND
        NOT MATERIAS.ANALITICO
    GROUP BY
      ALUMNOS_MATERIAS.NRO_MATERIA,
      MATERIAS.CURSO
    INTO
      :CURSO,
      :NOTA
    DO SUSPEND;
END

