sql Adecuacióndebloque para crearInscripcionesacadémicascuandoexisten inscripciones admini

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql Adecuacióndebloque para crearInscripcionesacadémicascuandoexisten inscripciones admini相关的知识,希望对你有一定的参考价值。


----------------------------INICIO PROCEDIMIENTO ------------------------
IF OBJECT_ID('spImportarCalificaciones', 'P') IS NOT NULL
      DROP PROC spImportarCalificaciones
GO

CREATE PROCEDURE spImportarCalificaciones
    @sCodigoTemporales VARCHAR(32) ,
    @inscAd INT OUTPUT ,
    @inscAc INT OUTPUT ,
    @cals INT OUTPUT ,
    @calsBorradas INT OUTPUT ,
    @equivs INT OUTPUT ,
    @estatusTray INT OUTPUT
/* --------------------------------------------------------------------------------------------------------------
FECHA		   |    AUTOR		|	DESCRIPCION
05/Abr/2017    | Luis Bernal	| Modificación de query en bloque de "Existe Inscripc Administrativa"
--------------------------------------------------------------------------------------------------------------*/
AS
    BEGIN
        SET NOCOUNT ON;

        DECLARE @CalifsAImportar TABLE
            (
              iFolioTrayectoria BIGINT ,
              idEvaluacion SMALLINT ,
              idEstatus TINYINT ,
              dCalificacion DECIMAL(7, 3) ,
              idUsuario INT ,
              sObservaciones VARCHAR(1000) ,
              dFechaRegistro DATETIME ,
              bHistorica BIT
            );
        DECLARE @sCodigoTemporales_ VARCHAR(32) ,
            @inscAd_ INT ,
            @inscAc_ INT ,
            @cals_ INT ,
            @cals_Borradas_ INT ,
            @equivs_ INT ,
            @estatusTray_ INT ,
            @sEtEquivalencia VARCHAR(10) ,
            @sEtExam VARCHAR(10);

        SET @sEtEquivalencia = 'EQ';
        SET @sEtExam = 'EG';
        SET @sCodigoTemporales_ = @sCodigoTemporales;
        SET @inscAd_ = 0;
        SET @inscAc_ = 0;
        SET @cals_ = 0;
        SET @cals_Borradas_ = 0;
        SET @equivs_ = 0;

      --************ EXISTE ACADEMICA
      --BORRA IMPORTACIONES ANTERIORES 
        DELETE  acadet
        FROM    Ctrl_TrayectoriaAcademicaDet acadet
                INNER JOIN Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp ON acadettmp.iFolioTrayectoriaReal = acadet.iFolioTrayectoria
                                                                             AND acadettmp.idEvaluacion = acadet.idEvaluacion
                                                                             AND acadettmp.sCodigo = @sCodigoTemporales_
                                                                             AND acadettmp.bImportable = 1
                                                                             AND acadet.bHistorica = 1
                                                                             AND ( acadettmp.sObservacionesArchivo IS NULL
                                                                                   OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
                                                                                        AND acadettmp.sObservacionesArchivo != @sEtExam
                                                                                      )
                                                                                 );

        SELECT  @cals_Borradas_ = @cals_Borradas_ + @@ROWCOUNT;

      --CALIFS
        INSERT  @CalifsAImportar
                SELECT  acad.iFolio ,
                        acadettmp.idEvaluacion ,
                        acadettmp.idEstatus ,
                        acadettmp.dCalificacion ,
                        acadettmp.idUsuario ,
                        NULL ,
                        acadettmp.dFechaReg ,
                        1
                FROM    Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
                        INNER JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolio = acadettmp.iFolioTrayectoriaReal
                                                                     AND acadettmp.sCodigo = @sCodigoTemporales_
                                                                     AND acadettmp.bImportable = 1
                                                                     AND ( acad.iOrden IS NULL
                                                                           OR acad.iOrden = 1
                                                                         )
                                                                     AND ( acadettmp.sObservacionesArchivo IS NULL
                                                                           OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
                                                                                AND acadettmp.sObservacionesArchivo != @sEtExam
                                                                              )
                                                                         )
                        INNER JOIN Ctrl_Inscripciones ins ON ins.iFolio = acad.iFolioInscripcion
             --solo no existentes
                        LEFT JOIN Ctrl_TrayectoriaAcademicaDet acadet ON acadet.iFolioTrayectoria = acad.iFolio
                                                                         AND acadet.idEvaluacion = acadettmp.idEvaluacion
                WHERE   acadet.iFolioTrayectoria IS NULL;

        WITH    noDuplicados
                  AS ( SELECT   califsImp.iFolioTrayectoria ,
                                califsImp.idEvaluacion ,
                                califsImp.idEstatus ,
                                califsImp.dCalificacion ,
                                califsImp.idUsuario ,
                                califsImp.sObservaciones ,
                                califsImp.dFechaRegistro ,
                                califsImp.bHistorica ,
                                ROW_NUMBER() OVER ( PARTITION BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ORDER BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ) AS no_row
                       FROM     @CalifsAImportar califsImp
                     )
            INSERT  Ctrl_TrayectoriaAcademicaDet
                    ( iFolioTrayectoria ,
                      idEvaluacion ,
                      idEstatus ,
                      dCalificacion ,
                      idUsuario ,
                      sObservaciones ,
                      dFechaReg ,
                      bHistorica
                    )
                    SELECT  noDuplicados.iFolioTrayectoria ,
                            noDuplicados.idEvaluacion ,
                            noDuplicados.idEstatus ,
                            noDuplicados.dCalificacion ,
                            noDuplicados.idUsuario ,
                            noDuplicados.sObservaciones ,
                            noDuplicados.dFechaRegistro ,
                            noDuplicados.bHistorica
                    FROM    noDuplicados
                    WHERE   noDuplicados.no_row = 1;

     
        SELECT  @cals_ = @cals_ + @@ROWCOUNT;

      --EQUIVALENCIA NO APLICA CUANDO HAY INSC ACADEMICA 
        INSERT  Ctrl_TrayectoriaAcademicaDetHistorialImp
                ( iFolioTrayectoria ,
                  idEvaluacion ,
                  idEstatus ,
                  dCalificacion ,
                  sObservaciones ,
                  dFechaAcreditacion ,
                  sCodigo ,
                  idUsuario ,
                  dFecha
                )
                SELECT  califsImp.iFolioTrayectoria ,
                        califsImp.idEvaluacion ,
                        califsImp.idEstatus ,
                        califsImp.dCalificacion ,
                        califsImp.sObservaciones ,
                        califsImp.dFechaRegistro ,
                        @sCodigoTemporales_ ,
                        califsImp.idUsuario ,
                        GETDATE()
                FROM    @CalifsAImportar califsImp;

--=================================================================================================================================================================================================================================
      --**********EXISTE ADMINISTRATIVA
      -----------------CREAR ACADÉMICA
        INSERT  Ctrl_TrayectoriaAcademica
                ( idGrupo ,
                  idAsignatura ,
                  idPlanEstudios ,
                  iFolioInscripcion ,
                  iOrden ,
                  iTipoResultado ,
                  bHistorica
                )
                SELECT  acadtmp.idGrupo ,
                        acadtmp.idAsignatura ,
                        acadtmp.idPlanEstudios ,
                        acadtmp.iFolioInscripcionReal ,
                        1 ,
                        acadtmp.iTipoResultado ,
                        1
                FROM    Ctrl_TrayectoriaAcademicaTmpCalif acadtmp
                        INNER JOIN Ctrl_Inscripciones ins ON ins.iFolio = acadtmp.iFolioInscripcionReal
                                                             AND acadtmp.sCodigo = @sCodigoTemporales_
             --solo no existentes
                        LEFT JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolioInscripcion = ins.iFolio
                                                                    AND acad.idAsignatura = acadtmp.idAsignatura
																	AND acad.idGrupo = acadtmp.idGrupo			-- Se agrega condición para crear de manera adecuada la Inscrip Academica - BIT/IAM-1410 - 05/Abr/2017
                WHERE   acad.iFolio IS NULL
                        AND EXISTS ( SELECT acadetmp.iFolioTrayectoria
                                     FROM   Ctrl_TrayectoriaAcademicaDetTmpCalif acadetmp
                                     WHERE  acadetmp.iFolioTrayectoria = acadtmp.iFolio
                                            AND acadetmp.bImportable = 1
                                            AND ( acadetmp.sObservacionesArchivo IS NULL
                                                  OR ( acadetmp.sObservacionesArchivo != @sEtEquivalencia
                                                       AND acadetmp.sObservacionesArchivo != @sEtExam
                                                     )
                                                ) );

        SELECT  @inscAc_ = @inscAc_ + @@ROWCOUNT;

      -----------------CALIFS     
        DELETE  FROM @CalifsAImportar;

        INSERT  @CalifsAImportar
                SELECT  acad.iFolio ,
                        acadettmp.idEvaluacion ,
                        acadettmp.idEstatus ,
                        acadettmp.dCalificacion ,
                        acadettmp.idUsuario ,
                        NULL ,
                        acadettmp.dFechaReg ,
                        1
                FROM    Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
                        INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
                                                                                AND acadettmp.sCodigo = @sCodigoTemporales_
                                                                                AND acadettmp.sCodigo = acadtmp.sCodigo
                                                                                AND acadettmp.bImportable = 1
                                                                                AND ( acadettmp.sObservacionesArchivo IS NULL
                                                                                      OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
                                                                                           AND acadettmp.sObservacionesArchivo != @sEtExam
                                                                                         )
                                                                                    )
                        INNER JOIN Ctrl_Inscripciones ins ON ins.iFolio = acadtmp.iFolioInscripcionReal
                        INNER JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolioInscripcion = ins.iFolio
                                                                     AND acad.bHistorica = 1
                                                                     AND acad.idAsignatura = acadtmp.idAsignatura
                                                                     AND acad.idGrupo = acadtmp.idGrupo
                                                                     AND acad.idPlanEstudios = acadtmp.idPlanEstudios
                                                                     AND acad.iOrden = 1
             --solo no existentes
                        LEFT JOIN Ctrl_TrayectoriaAcademicaDet acadet ON acadet.iFolioTrayectoria = acad.iFolio
                                                                         AND acadet.idEvaluacion = acadettmp.idEvaluacion
      --AND ( acadet.bHistorica IS NULL
      --       OR acadet.bHistorica = 0 )
                WHERE   acadet.iFolioTrayectoria IS NULL;

        WITH    noDuplicados
                  AS ( SELECT   califsImp.iFolioTrayectoria ,
                                califsImp.idEvaluacion ,
                                califsImp.idEstatus ,
                                califsImp.dCalificacion ,
                                califsImp.idUsuario ,
                                califsImp.sObservaciones ,
                                califsImp.dFechaRegistro ,
                                califsImp.bHistorica ,
                                ROW_NUMBER() OVER ( PARTITION BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ORDER BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ) AS no_row
                       FROM     @CalifsAImportar califsImp
                     )
            INSERT  Ctrl_TrayectoriaAcademicaDet
                    ( iFolioTrayectoria ,
                      idEvaluacion ,
                      idEstatus ,
                      dCalificacion ,
                      idUsuario ,
                      sObservaciones ,
                      dFechaReg ,
                      bHistorica
                    )
                    SELECT  noDuplicados.iFolioTrayectoria ,
                            noDuplicados.idEvaluacion ,
                            noDuplicados.idEstatus ,
                            noDuplicados.dCalificacion ,
                            noDuplicados.idUsuario ,
                            noDuplicados.sObservaciones ,
                            noDuplicados.dFechaRegistro ,
                            noDuplicados.bHistorica
                    FROM    noDuplicados
                    WHERE   noDuplicados.no_row = 1;

        SELECT  @cals_ = @cals_ + @@ROWCOUNT;

        INSERT  Ctrl_TrayectoriaAcademicaDetHistorialImp
                ( iFolioTrayectoria ,
                  idEvaluacion ,
                  idEstatus ,
                  dCalificacion ,
                  sObservaciones ,
                  dFechaAcreditacion ,
                  sCodigo ,
                  idUsuario ,
                  dFecha
                )
                SELECT  califsImp.iFolioTrayectoria ,
                        califsImp.idEvaluacion ,
                        califsImp.idEstatus ,
                        califsImp.dCalificacion ,
                        califsImp.sObservaciones ,
                        califsImp.dFechaRegistro ,
                        @sCodigoTemporales_ ,
                        califsImp.idUsuario ,
                        GETDATE()
                FROM    @CalifsAImportar califsImp;

      -----------------equivalencias
        WITH    califUnica
                  AS ( SELECT   acadtmp.idAsignatura ,
                                acadettmp.dCalificacion ,
                                GETDATE() AS dFecha ,
                                CASE WHEN acadettmp.sObservacionesArchivo = @sEtEquivalencia THEN 'Importación'
                                     WHEN acadettmp.sObservacionesArchivo = @sEtExam THEN 'E.G.U.M'
                                END AS sDictamen ,
                                acadettmp.idEstatus ,
                                acadettmp.idUsuario ,
                                ins.idAlumno ,
                                acadtmp.idPlanEstudios ,
                                'Equivalencia histórica creada por importación masiva' AS sObsEq ,
                                acadettmp.dFechaReg ,
                                ins.iFolioPeriodo ,
                                ROW_NUMBER() OVER ( PARTITION BY ins.idAlumno, acadtmp.idPlanEstudios, acadtmp.idAsignatura ORDER BY evals.iOrden DESC ) AS no_row
                       FROM     Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
                                INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
                                                                                        AND acadtmp.iFolioInscripcionReal IS NOT NULL
                                                                                        AND acadettmp.sCodigo = @sCodigoTemporales_
                                                                                        AND acadettmp.sCodigo = acadtmp.sCodigo
                                                                                        AND acadettmp.bImportable = 1
                                                                                        AND ( acadettmp.sObservacionesArchivo = @sEtEquivalencia
                                                                                              OR acadettmp.sObservacionesArchivo = @sEtExam
                                                                                            )
                                INNER JOIN Ctrl_FormEvaluacion evals ON evals.idEvaluacion = acadettmp.idEvaluacion
                                INNER JOIN Ctrl_Inscripciones ins ON ins.iFolio = acadtmp.iFolioInscripcionReal
                     )
            INSERT  Ctrl_Equivalencias
                    ( idAsignatura ,
                      dCalificacion ,
                      dFecha ,
                      sDictamen ,
                      idEstatus ,
                      idUsuario ,
                      idAlumno ,
                      idPlanEstudios ,
                      sDescripcion ,
                      dFechaAcreditacion ,
                      iFolioPeriodo
                    )
                    SELECT  idAsignatura ,
                            dCalificacion ,
                            dFecha ,
                            sDictamen ,
                            idEstatus ,
                            idUsuario ,
                            idAlumno ,
                            idPlanEstudios ,
                            sObsEq ,
                            califUnica.dFechaReg ,
                            iFolioPeriodo
                    FROM    califUnica
                    WHERE   no_row = 1
                            AND NOT EXISTS ( SELECT eq.idAlumno
                                             FROM   Ctrl_Equivalencias eq
                                             WHERE  eq.idAlumno = califUnica.idAlumno
                                                    AND eq.idAsignatura = califUnica.idAsignatura
                                                    AND eq.idPlanEstudios = califUnica.idPlanEstudios )
                            AND NOT EXISTS ( SELECT acad.iFolio
                                             FROM   Ctrl_TrayectoriaAcademica acad
                                                    INNER JOIN Ctrl_Inscripciones ins ON ins.idAlumno = califUnica.idAlumno
                                                                                         AND ins.iFolio = acad.iFolioInscripcion
                                                                                         AND acad.idAsignatura = califUnica.idAsignatura
                                                                                         AND acad.idPlanEstudios = califUnica.idPlanEstudios );

        SELECT  @equivs_ = @equivs_ + @@ROWCOUNT;

--=================================================================================================================================================================================================================================
      --**********NO EXISTEN INSCRIPCIONES
      ----------------- CREAR ADMINISTRATIVA
        INSERT  Ctrl_Inscripciones
                ( iFolioPeriodo ,
                  iNoPeriodo ,
                  idPlantel ,
                  idOfEduc ,
                  idEstatusInsc ,
                  idAlumno ,
                  idUsuario ,
                  idTipoHorario ,
                  bReinscripcion ,
                  dFecha ,
                  bRecargos ,
                  dBeca ,
                  bActivo ,
                  mColegiatura ,
                  mSobrecarga ,
                  dFechaEstatus ,
                  sObsEstatus ,
                  idUsuarioEstatus ,
                  bHistorica
                )
                SELECT  instmp.iFolioPeriodo ,
                        1 AS iNoPeriodo ,
                        instmp.idPlantel ,
                        instmp.idOfEduc ,
                        instmp.idEstatusInsc ,
                        instmp.idAlumno ,
                        instmp.idUsuario ,
                        instmp.idTipoHorario ,
                        1 AS bReinscripcion ,
                        instmp.dFecha ,
                        1 AS bRecargos ,
                        0 AS dBeca ,
                        1 AS bActivo ,
                        0 AS mColegiatura ,
                        0 AS mSobrecarga ,
                        instmp.dFecha AS dFechaEstatus ,
                        'Inscripción histórica creada por importación de calificaciones' ,
                        instmp.idUsuario ,
                        1 AS bHistorica
                FROM    Ctrl_InscripcionesTmpCalif instmp --solo no existentes
                        LEFT JOIN Ctrl_Inscripciones ins2 ON ins2.idAlumno = instmp.idAlumno
                                                             AND ins2.iFolioPeriodo = instmp.iFolioPeriodo
                                                             AND ins2.idPlantel = instmp.idPlantel
                                                             AND ins2.idOfEduc = instmp.idOfEduc
      --   AND ins2.bHistorica = 0
                WHERE   instmp.sCodigo = @sCodigoTemporales_
                        AND ins2.iFolio IS NULL
                        AND EXISTS ( SELECT acadtmp.iFolio
                                     FROM   Ctrl_TrayectoriaAcademicaTmpCalif acadtmp
                                            INNER JOIN Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp ON acadtmp.iFolioInscripcion = instmp.iFolio
                                                                                                         AND acadettmp.iFolioTrayectoria = acadtmp.iFolio
                                                                                                         AND ( acadettmp.sObservacionesArchivo IS NULL
                                                                                                               OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
                                                                                                                    AND acadettmp.sObservacionesArchivo != @sEtExam
                                                                                                                  )
                                                                                                             ) ); -- filtra equivalencias

        SELECT  @inscAd_ = @inscAd_ + @@ROWCOUNT;

      -----------------CREAR ACADÉMICA
        INSERT  Ctrl_TrayectoriaAcademica
                ( idGrupo ,
                  idAsignatura ,
                  idPlanEstudios ,
                  iFolioInscripcion ,
                  iOrden ,
                  iTipoResultado ,
                  bHistorica
                )
                SELECT  acadtmp.idGrupo ,
                        acadtmp.idAsignatura ,
                        acadtmp.idPlanEstudios ,
                        ins.iFolio ,
                        1 ,
                        acadtmp.iTipoResultado ,
                        1
                FROM    Ctrl_TrayectoriaAcademicaTmpCalif acadtmp
                        INNER JOIN Ctrl_InscripcionesTmpCalif instmp ON acadtmp.sCodigo = @sCodigoTemporales_
                                                                        AND acadtmp.sCodigo = instmp.sCodigo
                                                                        AND instmp.iFolio = acadtmp.iFolioInscripcion
                        INNER JOIN Ctrl_Inscripciones ins ON ins.idAlumno = instmp.idAlumno
                                                             AND ins.iFolioPeriodo = instmp.iFolioPeriodo
                                                             AND ins.idPlantel = instmp.idPlantel
                                                             AND ins.idOfEduc = instmp.idOfEduc
                                                             AND ins.bHistorica = 1
                                                             AND ins.idUsuario = instmp.idUsuario
             --solo no existentes
                        LEFT JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolioInscripcion = ins.iFolio
                                                                    AND acad.idPlanEstudios = acadtmp.idPlanEstudios
                                                                    AND acad.idAsignatura = acadtmp.idAsignatura
                WHERE   acad.iFolio IS NULL
                        AND EXISTS ( SELECT acadetmp.iFolioTrayectoria
                                     FROM   Ctrl_TrayectoriaAcademicaDetTmpCalif acadetmp
                                     WHERE  acadetmp.iFolioTrayectoria = acadtmp.iFolio
                                            AND acadetmp.bImportable = 1
                                            AND ( acadetmp.sObservacionesArchivo IS NULL
                                                  OR ( acadetmp.sObservacionesArchivo != @sEtEquivalencia
                                                       AND acadetmp.sObservacionesArchivo != @sEtExam
                                                     )
                                                ) );

        SELECT  @inscAc_ = @inscAc_ + @@ROWCOUNT;

      -----------------CALIFS     
        DELETE  FROM @CalifsAImportar;

        INSERT  @CalifsAImportar
                SELECT  acad.iFolio ,
                        acadettmp.idEvaluacion ,
                        acadettmp.idEstatus ,
                        acadettmp.dCalificacion ,
                        acadettmp.idUsuario ,
                        NULL ,
                        acadettmp.dFechaReg ,
                        1
                FROM    Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
                        INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
                                                                                AND acadettmp.sCodigo = @sCodigoTemporales_
                                                                                AND acadettmp.sCodigo = acadtmp.sCodigo
                                                                                AND acadettmp.bImportable = 1
                                                                                AND ( acadettmp.sObservacionesArchivo IS NULL
                                                                                      OR ( acadettmp.sObservacionesArchivo != @sEtEquivalencia
                                                                                           AND acadettmp.sObservacionesArchivo != @sEtExam
                                                                                         )
                                                                                    )
                        INNER JOIN Ctrl_InscripcionesTmpCalif instmp ON instmp.sCodigo = acadtmp.sCodigo
                                                                        AND instmp.iFolio = acadtmp.iFolioInscripcion
                        INNER JOIN Ctrl_Inscripciones ins --  ON ins.iFolio = acadtmp.iFolioInscripcionReal
                        ON ins.idAlumno = instmp.idAlumno
                           AND ins.iFolioPeriodo = instmp.iFolioPeriodo
                           AND ins.idPlantel = instmp.idPlantel
                           AND ins.idOfEduc = instmp.idOfEduc
                           AND ins.bHistorica = 1
                           AND ins.dFecha = instmp.dFecha
                           AND ins.idUsuario = instmp.idUsuario
                        INNER JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolioInscripcion = ins.iFolio
                                                                     AND acad.bHistorica = 1
                                                                     AND acad.idAsignatura = acadtmp.idAsignatura
                                                                     AND acad.idGrupo = acadtmp.idGrupo
                                                                     AND acad.idPlanEstudios = acadtmp.idPlanEstudios
                                                                     AND acad.iOrden = 1
             --solo no existentes
                        LEFT JOIN Ctrl_TrayectoriaAcademicaDet acadet ON acadet.iFolioTrayectoria = acad.iFolio
                                                                         AND acadet.idEvaluacion = acadettmp.idEvaluacion
      --AND ( acadet.bHistorica IS NULL
      --       OR acadet.bHistorica = 0 )
                WHERE   acadet.iFolioTrayectoria IS NULL;

        WITH    noDuplicados
                  AS ( SELECT   califsImp.iFolioTrayectoria ,
                                califsImp.idEvaluacion ,
                                califsImp.idEstatus ,
                                califsImp.dCalificacion ,
                                califsImp.idUsuario ,
                                califsImp.sObservaciones ,
                                califsImp.dFechaRegistro ,
                                califsImp.bHistorica ,
                                ROW_NUMBER() OVER ( PARTITION BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ORDER BY califsImp.iFolioTrayectoria, califsImp.idEvaluacion ) AS no_row
                       FROM     @CalifsAImportar califsImp
                     )
            INSERT  Ctrl_TrayectoriaAcademicaDet
                    ( iFolioTrayectoria ,
                      idEvaluacion ,
                      idEstatus ,
                      dCalificacion ,
                      idUsuario ,
                      sObservaciones ,
                      dFechaReg ,
                      bHistorica
                    )
                    SELECT  noDuplicados.iFolioTrayectoria ,
                            noDuplicados.idEvaluacion ,
                            noDuplicados.idEstatus ,
                            noDuplicados.dCalificacion ,
                            noDuplicados.idUsuario ,
                            noDuplicados.sObservaciones ,
                            noDuplicados.dFechaRegistro ,
                            noDuplicados.bHistorica
                    FROM    noDuplicados
                    WHERE   noDuplicados.no_row = 1;

        SELECT  @cals_ = @cals_ + @@ROWCOUNT;

        INSERT  Ctrl_TrayectoriaAcademicaDetHistorialImp
                ( iFolioTrayectoria ,
                  idEvaluacion ,
                  idEstatus ,
                  dCalificacion ,
                  sObservaciones ,
                  dFechaAcreditacion ,
                  sCodigo ,
                  idUsuario ,
                  dFecha
                )
                SELECT  iFolioTrayectoria ,
                        idEvaluacion ,
                        idEstatus ,
                        dCalificacion ,
                        sObservaciones ,
                        dFechaRegistro ,
                        @sCodigoTemporales_ ,
                        idUsuario ,
                        GETDATE()
                FROM    @CalifsAImportar;

  -----------------equivalencias  
  ;
        WITH    califUnica
                  AS ( SELECT   acadtmp.idAsignatura ,
                                acadettmp.dCalificacion ,
                                GETDATE() AS dFecha ,
                                CASE WHEN acadettmp.sObservacionesArchivo = @sEtEquivalencia THEN 'Importación'
                                     WHEN acadettmp.sObservacionesArchivo = @sEtExam THEN 'E.G.U.M'
                                END AS sDictamen ,
                                acadettmp.idEstatus ,
                                acadettmp.idUsuario ,
                                instmp.idAlumno ,
                                acadtmp.idPlanEstudios ,
                                'Equivalencia histórica creada por importación masiva' AS sObsEq ,
                                acadettmp.dFechaReg ,
                                instmp.iFolioPeriodo ,
                                ROW_NUMBER() OVER ( PARTITION BY instmp.idAlumno, acadtmp.idPlanEstudios, acadtmp.idAsignatura ORDER BY evals.iOrden DESC ) AS no_row
                       FROM     Ctrl_TrayectoriaAcademicaDetTmpCalif acadettmp
                                INNER JOIN Ctrl_TrayectoriaAcademicaTmpCalif acadtmp ON acadtmp.iFolio = acadettmp.iFolioTrayectoria
                                                                                        AND acadtmp.iFolioInscripcionReal IS NULL
                                                                                        AND acadettmp.sCodigo = @sCodigoTemporales_
                                                                                        AND acadettmp.sCodigo = acadtmp.sCodigo
                                                                                        AND acadettmp.bImportable = 1
                                                                                        AND ( acadettmp.sObservacionesArchivo = @sEtEquivalencia
                                                                                              OR acadettmp.sObservacionesArchivo = @sEtExam
                                                                                            )
                                INNER JOIN Ctrl_FormEvaluacion evals ON evals.idEvaluacion = acadettmp.idEvaluacion
                                INNER JOIN Ctrl_InscripcionesTmpCalif instmp ON instmp.sCodigo = acadtmp.sCodigo
                                                                                AND instmp.iFolio = acadtmp.iFolioInscripcion
                     )
            INSERT  Ctrl_Equivalencias
                    ( idAsignatura ,
                      dCalificacion ,
                      dFecha ,
                      sDictamen ,
                      idEstatus ,
                      idUsuario ,
                      idAlumno ,
                      idPlanEstudios ,
                      sDescripcion ,
                      dFechaAcreditacion ,
                      iFolioPeriodo
                    )
                    SELECT  idAsignatura ,
                            dCalificacion ,
                            dFecha ,
                            sDictamen ,
                            idEstatus ,
                            idUsuario ,
                            idAlumno ,
                            idPlanEstudios ,
                            sObsEq ,
                            califUnica.dFechaReg ,
                            iFolioPeriodo
                    FROM    califUnica
                    WHERE   no_row = 1
                            AND NOT EXISTS ( SELECT eq.idAlumno
                                             FROM   Ctrl_Equivalencias eq
                                             WHERE  eq.idAlumno = califUnica.idAlumno
                                                    AND eq.idAsignatura = califUnica.idAsignatura
                                                    AND eq.idPlanEstudios = califUnica.idPlanEstudios )
                            AND NOT EXISTS ( SELECT acad.iFolio
                                             FROM   Ctrl_TrayectoriaAcademica acad
                                                    INNER JOIN Ctrl_Inscripciones ins ON ins.idAlumno = califUnica.idAlumno
                                                                                         AND ins.iFolio = acad.iFolioInscripcion
                                                                                         AND acad.idAsignatura = califUnica.idAsignatura
                                                                                         AND acad.idPlanEstudios = califUnica.idPlanEstudios );

        SELECT  @equivs_ = @equivs_ + @@ROWCOUNT;

      -----******** ITIPORESULTADO
        DECLARE @idFormEval SMALLINT;

        SELECT TOP 1
                @idFormEval = ev.idFormEvaluacion
        FROM    ( SELECT TOP 1
                            *
                  FROM      Ctrl_TrayectoriaAcademicaDetHistorialImp historial
                  WHERE     sCodigo = @sCodigoTemporales_
                ) cals
                INNER JOIN Ctrl_TrayectoriaAcademica acad ON acad.iFolio = cals.iFolioTrayectoria
                INNER JOIN Ctrl_PlanEstudios planestdet ON planestdet.idPlanEstudios = acad.idPlanEstudios
                                                           AND planestdet.idAsignatura = acad.idAsignatura
                INNER JOIN Cat_PlanEstudios planest ON planest.idPlanEstudios = planestdet.idPlanEstudios
                INNER JOIN Cat_FormEvaluacion ev ON ev.idFormEvaluacion = CASE WHEN planestdet.idFormEvaluacion IS NOT NULL THEN planestdet.idFormEvaluacion
                                                                               ELSE planest.idFormEvaluacion
                                                                          END;

      --evaluaciones
        DECLARE @TEvOr TABLE
            (
              idFormEvaluacion SMALLINT PRIMARY KEY ,
              bTaller BIT ,
              idEvaluacion SMALLINT ,
              iOrden TINYINT ,
              bExtraordinaria BIT ,
              dMinimaAprobatoria DECIMAL(7, 3)
            );

        INSERT  @TEvOr
                SELECT  T1.idFormEvaluacion ,
                        T3.bTaller ,
                        T2.idEvaluacion ,
                        T2.iOrden ,
                        T2.bExtraordinaria ,
                        T3.dMinimaAprobatoria
                FROM    ( SELECT    ev.idFormEvaluacion ,
                                    MAX(iOrden) AS iOrdenMax
                          FROM      Ctrl_FormEvaluacion ev
                          WHERE     ev.idFormEvaluacion = @idFormEval
                                    AND bExtraordinaria = 0
                          GROUP BY  ev.idFormEvaluacion
                        ) T1
                        INNER JOIN Ctrl_FormEvaluacion T2 ON T2.idFormEvaluacion = T1.idFormEvaluacion
                                                             AND T2.iOrden = T1.iOrdenMax
                        INNER JOIN Cat_FormEvaluacion T3 ON T3.idFormEvaluacion = T1.idFormEvaluacion;

        DECLARE @evalsUtiles TABLE
            (
              iFolioTrayectoria BIGINT ,
              idEvaluacion SMALLINT ,
              idEstatus TINYINT ,
              dCalificacion DECIMAL(7, 3) ,
              bExtra BIT
            );

        INSERT  @evalsUtiles
                SELECT  historial.iFolioTrayectoria ,
                        historial.idEvaluacion ,
                        historial.idEstatus ,
                        historial.dCalificacion ,
                        0
                FROM    Ctrl_TrayectoriaAcademicaDetHistorialImp historial
                        INNER JOIN @TEvOr ord ON historial.sCodigo = @sCodigoTemporales_
                                                 AND ord.idEvaluacion = historial.idEvaluacion
                WHERE   NOT EXISTS ( SELECT historialExtras.iFolioTrayectoria
                                     FROM   Ctrl_TrayectoriaAcademicaDetHistorialImp historialExtras
                                            INNER JOIN Ctrl_FormEvaluacion evals ON historialExtras.sCodigo = @sCodigoTemporales_
                                                                                    AND historialExtras.iFolioTrayectoria = historial.iFolioTrayectoria
                                                                                    AND evals.idEvaluacion = historialExtras.idEvaluacion
                                                                                    AND evals.bExtraordinaria = 1 );

        WITH    evalsExtra
                  AS ( SELECT   historial.* ,
                                ROW_NUMBER() OVER ( PARTITION BY historial.iFolioTrayectoria ORDER BY evals.iOrden DESC ) AS no_row
                       FROM     Ctrl_TrayectoriaAcademicaDetHistorialImp historial
                                INNER JOIN Ctrl_FormEvaluacion evals ON historial.sCodigo = @sCodigoTemporales_
                                                                        AND evals.idEvaluacion = historial.idEvaluacion
                                INNER JOIN @TEvOr ord ON ord.idFormEvaluacion = evals.idFormEvaluacion
                                                         AND ord.idEvaluacion <> historial.idEvaluacion
                                                         AND ord.iOrden < evals.iOrden
                     )
            INSERT  @evalsUtiles
                    SELECT  evalsExtra.iFolioTrayectoria ,
                            evalsExtra.idEvaluacion ,
                            evalsExtra.idEstatus ,
                            evalsExtra.dCalificacion ,
                            1
                    FROM    evalsExtra
                    WHERE   evalsExtra.no_row = 1;

      --regular_cursando = 0,
      --exento = 1,
      --repruebaOblig = 2,
      --apruebaOblig = 3,
      --repruebaExtra = 4,
      --apruebaExtra = 5,
      --repruebaFaltas = 6
        UPDATE  acad
        SET     acad.iTipoResultado = T1.iTipoResultado
        FROM    Ctrl_TrayectoriaAcademica acad
                INNER JOIN ( SELECT ultimasEvals.iFolioTrayectoria ,
                                    ultimasEvals.dCalificacion ,
                                    estatus.sAbreviatura ,
                                    estatus.bAprobado ,
                                    ord.dMinimaAprobatoria ,
                                    CAST (CASE WHEN estatus.bAprobado IS NOT NULL
                                               THEN CASE WHEN estatus.bAprobado = 0 THEN CASE WHEN ultimasEvals.bExtra = 0 THEN 2
                                                                                              ELSE 4
                                                                                         END
                                                         ELSE CASE WHEN ultimasEvals.bExtra = 0 THEN 3
                                                                   ELSE 5
                                                              END
                                                    END
                                               ELSE CASE WHEN ultimasEvals.dCalificacion >= ord.dMinimaAprobatoria THEN CASE WHEN ultimasEvals.bExtra = 0 THEN 3
                                                                                                                             ELSE 5
                                                                                                                        END
                                                         ELSE CASE WHEN ultimasEvals.bExtra = 0 THEN 2
                                                                   ELSE 4
                                                              END
                                                    END
                                          END AS TINYINT) AS iTipoResultado
                             FROM   @evalsUtiles ultimasEvals
                                    CROSS APPLY @TEvOr ord
                                    LEFT JOIN Cat_EstatusEvaluacion estatus ON ultimasEvals.idEstatus IS NOT NULL
                                                                               AND ultimasEvals.idEstatus = estatus.idEstatus
                           ) T1 ON T1.iFolioTrayectoria = acad.iFolio
                                   AND ( acad.iOrden IS NULL
                                         OR acad.iOrden = 1
                                       );
        SELECT  @estatusTray_ = @@ROWCOUNT;

        SELECT  @inscAd = @inscAd_;

        SELECT  @inscAc = @inscAc_;

        SELECT  @cals = @cals_;

        SELECT  @calsBorradas = @cals_Borradas_;

        SELECT  @equivs = @equivs_;

        SELECT  @estatusTray = @estatusTray_;
    END; 

以上是关于sql Adecuacióndebloque para crearInscripcionesacadémicascuandoexisten inscripciones admini的主要内容,如果未能解决你的问题,请参考以下文章

sql spListarHorariosGlobalSinColumnas - Adecuaciónparacorregirconsecutivonuméricodecolore

sql BIT / IAM-1626 - spPanelAlumnoValidaInscAsignatura - Adecuacióndevalidaciones para checa

sql Adecuacióndebloque para crearInscripcionesacadémicascuandoexisten inscripciones admini

sql Adecuaciónparacalculo de indicadores de totales de alumnosenpágina校长

sql Adecuaciónderendimiento para mostrar porcentaje de inasistenciaengráficenpanel de Prof

sql BIT / IAM-1605 - Adecuaciónparamostrar asignaturas que no se hayan tomado sin thoughtfulra