sql spListarHorariosGlobalSinColumnas - Correccióndecambios para mostrar listado de materias c

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql spListarHorariosGlobalSinColumnas - Correccióndecambios para mostrar listado de materias c相关的知识,希望对你有一定的参考价值。


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

CREATE PROCEDURE spListarHorariosGlobalSinColumnas
/* --------------------------------------------------------------------------------------------------------------
FECHA		   |		AUTOR		|	DESCRIPCION
00/00/2015     | Leonardo Dominguez	|
19/12/2016	   | Christian Lopez	|
23/03/2017	   | Luis Bernal		|
30/03/2017	   | Luis Bernal		| Se modificó para corregir el consecutivo de numeros y colores ya que si para una asignatura había dos aulas para días diferentes se saltaba el consecutivo.
--------------------------------------------------------------------------------------------------------------*/
--@Variables INT
    @idGrupo SMALLINT ,
    @iFolioPeriodo BIGINT ,
    @idAulaF SMALLINT ,
    @idAsignaturaF SMALLINT ,
    @idAlumnoF INT ,
    @idProfesorF INT
AS
    BEGIN
        SET NOCOUNT ON;
        SET NOCOUNT ON;
        SET LANGUAGE spanish;
        SET DATEFORMAT MDY;
        SET DATEFIRST 7;
   --CONTENIDO PROCEDIMIENTO


   
--DECLARE @idGrupo SMALLINT = 91 ,
--    @iFolioPeriodo BIGINT = 11 ,
--    @idAulaF SMALLINT = 0 ,
--    @idAsignaturaF SMALLINT = 0 ,
--    @idAlumnoF INT = 0 ,
--    @idProfesorF INT = 0

   
/*------------------------------------------------------------------------------------------------------------------------------------*/

        DECLARE @idHorarioClase SMALLINT ,
            @idHorarioClaseAux SMALLINT = 0 ,
            @sHorario VARCHAR(50) ,
            @sHorarioAux VARCHAR(50) ,
            @iDia TINYINT ,
            @sAsignatura VARCHAR(150) ,
            @sAula VARCHAR(50) ,
            @sProfesor VARCHAR(150) ,
            @iFolioGrupoClases BIGINT
			



        DECLARE @TColores TABLE
            (
              iNumero TINYINT ,
              sColor VARCHAR(15)
            )
        INSERT  INTO @TColores
                ( iNumero ,
                  sColor
                )
                SELECT  fstc.iNo ,
                        fstc.sCodigoColor
                FROM    dbo.fnSis_TablaColores('500', 3) AS fstc



        DECLARE @TR TABLE
            (
              idHorarioClase SMALLINT ,
              sHorario VARCHAR(150) ,
              iDia TINYINT ,
              idAsignatura SMALLINT ,
              sAsignatura VARCHAR(150) ,
              idAula SMALLINT ,
              sAula VARCHAR(50) ,
              idProfesor INT ,
              sProfesor VARCHAR(150) ,
              iFolioGrupoClases BIGINT ,
              sColor VARCHAR(15) ,
              iColor SMALLINT ,
              dHoraIni DATETIME ,
              dHoraFin DATETIME ,
              sGrupo VARCHAR(150) ,
			  idGrupo SMALLINT
            )

        IF @idAlumnoF = 0
            BEGIN
                INSERT  INTO @TR
                        ( idHorarioClase ,
                          sHorario ,
                          iDia ,
                          idAsignatura ,
                          sAsignatura ,
                          idAula ,
                          sAula ,
                          idProfesor ,
                          sProfesor ,
                          iFolioGrupoClases ,
                          sColor ,
                          dHoraIni ,
                          dHoraFin ,
                          sGrupo,
						  idGrupo
                        )
                        SELECT  chc.idHorarioClase ,
                                REPLACE(CAST(CAST(chc.dHoraInicio AS TIME) AS VARCHAR(50)),
                                        ':00.0000000', '') + ' - '
                                + REPLACE(CAST(CAST(chc.dHoraFin AS TIME) AS VARCHAR(50)),
                                          ':00.0000000', '') AS sHorario ,
                                cgcd.iDia ,
                                ca.idAsignatura ,
                                ca.sAsignatura ,
                                ca2.idAula ,
                                ca2.sAula ,
                                cgc.idProfesor ,
                                cp.sApellidoP + ' ' + cp.sApellidoM + ' '
                                + cp.sNombre AS sProfesor ,
                                cgcd.iFolioGrupoClases ,
                                '' ,
                                chc.dHoraInicio ,
                                chc.dHoraFin ,
                                cg.sNombre,
								cg.idGrupo
                        FROM    dbo.Cat_HorarioClase AS chc
                                LEFT JOIN dbo.Ctrl_GrupoClasesDet AS cgcd ON cgcd.idHorarioClase = chc.idHorarioClase
                                INNER JOIN dbo.Ctrl_GrupoClases AS cgc ON cgc.iFolio = cgcd.iFolioGrupoClases
                                                              AND ( cgc.idGrupo = @idGrupo
                                                              OR @idGrupo = 0
                                                              )
                                                              AND cgc.iFolioPeriodo = @iFolioPeriodo
                                INNER JOIN dbo.Ctrl_Grupos AS cg ON cg.idGrupo = cgc.idGrupo
                                INNER JOIN dbo.Cat_Asignaturas AS ca ON ca.idAsignatura = cgc.idAsignatura
                                INNER JOIN dbo.Cat_Profesores AS cp ON cp.idProfesor = cgc.idProfesor
                                INNER JOIN dbo.Cat_Aulas AS ca2 ON ca2.idAula = cgcd.idAula
                        WHERE   ( @idAulaF = 0
                                  OR ca2.idAula = @idAulaF
                                )
                                AND ( @idProfesorF = 0
                                      OR cgc.idProfesor = @idProfesorF
                                    )
                                AND ( @idAsignaturaF = 0
                                      OR ca.idAsignatura = @idAsignaturaF
                                    )
                        ORDER BY chc.dHoraInicio ,
                                chc.dHoraFin ,
                                iDia

            END
        ELSE
            BEGIN
                INSERT  INTO @TR
                        ( idHorarioClase ,
                          sHorario ,
                          iDia ,
                          idAsignatura ,
                          sAsignatura ,
                          idAula ,
                          sAula ,
                          idProfesor ,
                          sProfesor ,
                          iFolioGrupoClases ,
                          sColor ,
                          dHoraIni ,
                          dHoraFin ,
                          sGrupo,
						  idGrupo
                        )
                        SELECT  chc.idHorarioClase ,
                                REPLACE(CAST(CAST(chc.dHoraInicio AS TIME) AS VARCHAR(50)),
                                        ':00.0000000', '') + ' - '
                                + REPLACE(CAST(CAST(chc.dHoraFin AS TIME) AS VARCHAR(50)),
                                          ':00.0000000', '') AS sHorario ,
                                cgcd.iDia ,
                                ca.idAsignatura ,
                                ca.sAsignatura ,
                                ca2.idAula ,
                                ca2.sAula ,
                                cgc.idProfesor ,
                                cp.sApellidoP + ' ' + cp.sApellidoM + ' '
                                + cp.sNombre AS sProfesor ,
                                cgcd.iFolioGrupoClases ,
                                '' ,
                                chc.dHoraInicio ,
                                chc.dHoraFin ,
                                cg.sNombre,
								cg.idGrupo
                        FROM    dbo.Cat_HorarioClase AS chc
                                LEFT JOIN dbo.Ctrl_GrupoClasesDet AS cgcd ON cgcd.idHorarioClase = chc.idHorarioClase
                                INNER JOIN dbo.Ctrl_GrupoClases AS cgc ON cgc.iFolio = cgcd.iFolioGrupoClases
                                                              --AND ( cgc.idGrupo = @idGrupo
                                                              --OR @idGrupo = 0
                                                              --)
                                                              AND cgc.iFolioPeriodo = @iFolioPeriodo
                                INNER JOIN dbo.Ctrl_Grupos AS cg ON cg.idGrupo = cgc.idGrupo
                                INNER JOIN dbo.Cat_Asignaturas AS ca ON ca.idAsignatura = cgc.idAsignatura
                                INNER JOIN dbo.Cat_Profesores AS cp ON cp.idProfesor = cgc.idProfesor
                                INNER JOIN dbo.Cat_Aulas AS ca2 ON ca2.idAula = cgcd.idAula
                                INNER JOIN dbo.Ctrl_TrayectoriaAcademica AS cta ON cta.idAsignatura = cgc.idAsignatura
                                                              AND cta.idGrupo = cg.idGrupo
                                                              --AND cta.idPlanEstudios = cg.idPlanEstudios -- se quito para que traiga las inscripciones en otro plan de estudios por lo de tronco
                                INNER JOIN dbo.Ctrl_Inscripciones AS ci ON ci.iFolio = cta.iFolioInscripcion
                                                              AND ci.iFolioPeriodo = cgc.iFolioPeriodo
                        WHERE   ( @idAulaF = 0
                                  OR ca2.idAula = @idAulaF
                                )
                                AND ( @idProfesorF = 0
                                      OR cgc.idProfesor = @idProfesorF
                                    )
                                AND ( @idAsignaturaF = 0
                                      OR ca.idAsignatura = @idAsignaturaF
                                    )
                                AND ( @idGrupo = 0
                                      OR cgc.idGrupo = @idGrupo
                                    )
                                AND ci.idAlumno = @idAlumnoF
                        ORDER BY chc.dHoraInicio ,
                                chc.dHoraFin ,
                                iDia
            END


        
        DECLARE @idAsignaturaColor SMALLINT ,
            @sAsignaturaColor VARCHAR(150) ,
            @idAulaColor SMALLINT ,
            @sAulaColor VARCHAR(50) ,
            @idProfesorColor INT ,
            @sProfesorColor VARCHAR(150) ,
            @iContColor TINYINT = 1 ,
            @idAsignaturaAuxColor SMALLINT = 0 ,
            @idAulaAuxColor SMALLINT = 0 ,
            @idProfesorAuxColor INT = 0
		/*------------------------------------------------------------------------------------------------------------------------------------*/
		
				
        DECLARE cCursorColores CURSOR LOCAL
        FOR
            SELECT DISTINCT
                    t.idAsignatura ,
                    t.sAsignatura ,
                    t.idAula ,
                    t.sAula ,
                    t.idProfesor ,
                    t.sProfesor
            FROM    @TR AS t
    --ORDER BY t.dHoraIni ,
    --        t.dHoraFin ,
    --        t.iDia
				
        OPEN cCursorColores
        FETCH cCursorColores INTO @idAsignaturaColor, @sAsignaturaColor,
            @idAulaColor, @sAulaColor, @idProfesorColor, @sProfesorColor
		
        WHILE ( @@FETCH_STATUS = 0 )
            BEGIN

                IF @idAsignaturaColor <> @idAsignaturaAuxColor
                    --OR @idAulaColor <> @idAulaAuxColor	--*Se comenta esta condición ya que al reconocer diferentes aulas para una misma materia se saltaba consecutivo de colores 30/Mar/2017
                    OR @idProfesorColor <> @idProfesorAuxColor
                    BEGIN
                        DECLARE @sColorColor VARCHAR(15) = ( SELECT
                                                              tc.sColor
                                                             FROM
                                                              @TColores AS tc
                                                             WHERE
                                                              tc.iNumero = @iContColor
                                                           )
				
                        UPDATE  @TR
                        SET     sColor = @sColorColor ,
                                iColor = @iContColor
                        WHERE   idAsignatura = @idAsignaturaColor
                                --AND idAula = @idAulaColor --*Se comenta esta condición ya que para materias con diferente aula se mostraban como diferentes materias y por ende con diferente color 23/Mar/2017
                                AND idProfesor = @idProfesorColor
				
                        SET @iContColor = @iContColor + 1
                        SET @idAsignaturaAuxColor = @idAsignaturaColor
                        SET @idAulaAuxColor = @idAulaColor
                        SET @idProfesorAuxColor = @idProfesorColor
                    END
				
					
                FETCH cCursorColores INTO @idAsignaturaColor,
                    @sAsignaturaColor, @idAulaColor, @sAulaColor,
                    @idProfesorColor, @sProfesorColor
            END
		
        CLOSE cCursorColores
        DEALLOCATE cCursorColores
		/*------------------------------------------------------------------------------------------------------------------------------------*/

        SELECT targh.idHorarioClase
             , targh.sHorario
             , targh.iDia
             , targh.idAsignatura
             , targh.sAsignatura
             , targh.idAula
             , targh.sAula
             , targh.idProfesor
             , targh.sProfesor
             , targh.iFolioGrupoClases
             , targh.sColor
             , targh.iColor
             , targh.sGrupo
             , targh.idGrupo
             , targh.dFechaI
             , targh.dFechaF
             , targh.idPlantel
			 , targh.sPlantel FROM (SELECT DISTINCT  t.idHorarioClase ,
                t.sHorario ,
                t.iDia ,
                t.idAsignatura ,
                t.sAsignatura ,
                t.idAula ,
                t.sAula ,
                t.idProfesor ,
                t.sProfesor ,
                t.iFolioGrupoClases ,
                t.sColor AS sColor ,
                t.iColor ,
                t.sGrupo,
				t.idGrupo,
				l.dFechaI,
				l.dFechaF
				, cg.idPlantel
				, cp.sNombre AS sPlantel
        FROM    @TR AS t
                LEFT JOIN dbo.Cat_HorarioClase AS chc ON chc.idHorarioClase = t.idHorarioClase
				LEFT JOIN dbo.Ctrl_Grupos AS cg ON cg.idGrupo = t.idGrupo
				LEFT JOIN dbo.Cat_Planteles AS cp ON cp.idPlantel = cg.idPlantel
				CROSS APPLY ( SELECT TOP 1 * FROM Ctrl_GrupoClases cgc WHERE cgc.iFolio = t.iFolioGrupoClases) l
				) targh
        ORDER BY targh.idHorarioClase ,
                targh.iDia ,
				targh.idAsignatura

    END

以上是关于sql spListarHorariosGlobalSinColumnas - Correccióndecambios para mostrar listado de materias c的主要内容,如果未能解决你的问题,请参考以下文章

sql [sql技巧]一些sql技巧#sql

sql 2008 r2 在sql 2008上兼容么

SQL基础

有大神知道,sql server 中如何批量执行sql语句吗?

pl sql developer怎么执行sql

pl sql developer怎么执行sql