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的主要内容,如果未能解决你的问题,请参考以下文章