sql Correcciónparamostrar datos en el informe de“Indicador de promedios generales” - TICKET BI
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sql Correcciónparamostrar datos en el informe de“Indicador de promedios generales” - TICKET BI相关的知识,希望对你有一定的参考价值。
/* --------------------------------------------------------------------------------------------------------------
FECHA | AUTOR |DESCRIPCION
16/Mar/2017 | Luis Bernal |
--------------------------------------------------------------------------------------------------------------*/
----------------------------INICIO PROCEDIMIENTO ------------------------
IF OBJECT_ID('spRPTCEPromediosGenerales', 'P') IS NOT NULL
DROP PROC spRPTCEPromediosGenerales
GO
CREATE PROCEDURE spRPTCEPromediosGenerales
@Planteles listaSmallInt READONLY ,
@Ofertas listaSmallInt READONLY ,
@Grados listaTinyint READONLY ,
@Periodos listaBigInt READONLY ,
@Evaluaciones listaSmallInt READONLY
AS
BEGIN
SET NOCOUNT ON;
SET LANGUAGE spanish;
DECLARE @sEscuela VARCHAR(250);
SELECT @sEscuela = CDI.sNombre
FROM dbo.Cat_DatosInstitucion CDI;
DECLARE @Promedios TABLE
(
sEscuela VARCHAR(250) ,
dPromedioEscuela DECIMAL(7, 2) ,
idPlantel SMALLINT ,
sPlantel VARCHAR(150) ,
iContPlanteles TINYINT ,
dPromedioPlantel DECIMAL(7, 2) ,
idOfEduc SMALLINT ,
sOfEduc VARCHAR(150) ,
iContOfertas TINYINT ,
dPromedioOferta DECIMAL(7, 2) ,
iGrado TINYINT ,
sGrado VARCHAR(6) ,
iContGrados TINYINT ,
dPromedioGrado DECIMAL(7, 2) ,
idGrupo SMALLINT ,
sGrupo VARCHAR(50) ,
iContGrupos TINYINT ,
dPromedioGrupo DECIMAL(7, 2) ,
idAsignatura SMALLINT ,
sAsignatura VARCHAR(150) ,
iOrdenAsignatura TINYINT ,
iContAsignaturas TINYINT ,
dPromedioAsignaturas DECIMAL(7, 2) ,
idEvaluacion SMALLINT ,
sEvaluacion VARCHAR(50) ,
iOrdenEvaluacion TINYINT ,
iContEvaluaciones TINYINT ,
dPromedio DECIMAL(7, 2)
);
INSERT INTO @Promedios
SELECT @sEscuela ,
0 ,
CP.idPlantel ,
CP.sNombre AS sPlantel ,
0 ,
0 ,
COE.idOfEduc ,
COE.sNombre AS sOfEduc ,
0 ,
0 ,
CPE.iGrado ,
CAST(CPE.iGrado AS VARCHAR(2)) + '°' AS sGrado ,
0 ,
0 ,
CG.idGrupo ,
CG.sNombre AS sGrupo ,
0 ,
0 ,
CA.idAsignatura ,
CA.sAsignatura ,
CPE.iOrden ,
0 ,
0 ,
CFE.idEvaluacion ,
CFE.sNombre AS sEvaluacion ,
CFE.iOrden ,
0 ,
dbo.fnCalcularPromedioGeneral(CG.idPlantel, COE.idOfEduc, CG.idPlanEstudios, CG.idGrupo, CG.iGrado, CFE.idEvaluacion, CGCT.iFolioPeriodo, CA.idAsignatura) dPromedio
FROM dbo.Ctrl_Grupos CG
INNER JOIN dbo.Ctrl_PlanEstudios CPE ON CG.idPlanEstudios = CPE.idPlanEstudios
INNER JOIN @Grados G ON G.id = CPE.iGrado
INNER JOIN dbo.Cat_PlanEstudios CPE2 ON CPE2.idPlanEstudios = CPE.idPlanEstudios
INNER JOIN dbo.Ctrl_FormEvaluacion CFE ON CFE.idFormEvaluacion = ISNULL(CPE.idFormEvaluacion, CPE2.idFormEvaluacion)
AND CFE.bExtraordinaria = 0
INNER JOIN @Evaluaciones E ON E.id = CFE.idEvaluacion
INNER JOIN dbo.Cat_OfEduc COE ON COE.idOfEduc = CPE2.idOfEduc
INNER JOIN @Ofertas O ON O.id = COE.idOfEduc
INNER JOIN dbo.Cat_Asignaturas CA ON CA.idAsignatura = CPE.idAsignatura
INNER JOIN dbo.Cat_Planteles CP ON CP.idPlantel = CG.idPlantel
INNER JOIN @Planteles P ON P.id = CG.idPlantel
INNER JOIN dbo.Ctrl_GrupoClaseTentativo CGCT ON CGCT.idGrupo = CG.idGrupo
AND CGCT.idAsignatura = CA.idAsignatura
INNER JOIN @Periodos P2 ON P2.id = CGCT.iFolioPeriodo
WHERE dbo.fnCuentaInscripcionesAcademicas(CGCT.iFolioPeriodo, CGCT.idGrupo, CGCT.idAsignatura) > 0;
DECLARE @iCont TINYINT = 0 ,
@dPromedio DECIMAL(7, 3) ,
@idPlantel SMALLINT ,
@idOfEduc SMALLINT ,
@iGrado TINYINT ,
@idGrupo SMALLINT ,
@idAsignatura SMALLINT ,
@idEvaluacion SMALLINT;
SET @iCont = 0;
SET @dPromedio = 0;
SELECT @iCont = COUNT(DISTINCT P.idPlantel) ,
@dPromedio = AVG(P.dPromedio)
FROM @Promedios P;
UPDATE @Promedios
SET iContPlanteles = @iCont ,
dPromedioEscuela = @dPromedio;
DECLARE cPlanteles CURSOR LOCAL
FOR
SELECT DISTINCT
P.idPlantel
FROM @Promedios P;
OPEN cPlanteles;
FETCH cPlanteles INTO @idPlantel;
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
SET @iCont = 0;
SET @dPromedio = 0;
SELECT @iCont = COUNT(DISTINCT P.idOfEduc) ,
@dPromedio = AVG(P.dPromedio)
FROM @Promedios P
WHERE P.idPlantel = @idPlantel;
UPDATE @Promedios
SET iContOfertas = @iCont ,
dPromedioPlantel = @dPromedio
WHERE idPlantel = @idPlantel;
---------------------------------------------------------------------
DECLARE cOfertas CURSOR LOCAL
FOR
SELECT DISTINCT
P.idOfEduc
FROM @Promedios P
WHERE P.idPlantel = @idPlantel;
OPEN cOfertas;
FETCH cOfertas INTO @idOfEduc;
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
SET @iCont = 0;
SET @dPromedio = 0;
SELECT @iCont = COUNT(DISTINCT P.iGrado) ,
@dPromedio = AVG(P.dPromedio)
FROM @Promedios P
WHERE P.idPlantel = @idPlantel
AND P.idOfEduc = @idOfEduc;
UPDATE @Promedios
SET iContGrados = @iCont ,
dPromedioOferta = @dPromedio
WHERE idPlantel = @idPlantel
AND idOfEduc = @idOfEduc;
---------------------------------------------------------------------
DECLARE cGrados CURSOR LOCAL
FOR
SELECT DISTINCT
P.iGrado
FROM @Promedios P
WHERE P.idPlantel = @idPlantel
AND P.idOfEduc = @idOfEduc;
OPEN cGrados;
FETCH cGrados INTO @iGrado;
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
SET @iCont = 0;
SET @dPromedio = 0;
SELECT @iCont = COUNT(DISTINCT P.idGrupo) ,
@dPromedio = AVG(P.dPromedio)
FROM @Promedios P
WHERE P.idPlantel = @idPlantel
AND P.idOfEduc = @idOfEduc
AND P.iGrado = @iGrado;
UPDATE @Promedios
SET iContGrupos = @iCont ,
dPromedioGrado = @dPromedio
WHERE idPlantel = @idPlantel
AND idOfEduc = @idOfEduc
AND iGrado = @iGrado;
---------------------------------------------------------------------
DECLARE cGrupos CURSOR LOCAL
FOR
SELECT DISTINCT
P.idGrupo
FROM @Promedios P
WHERE P.idPlantel = @idPlantel
AND P.idOfEduc = @idOfEduc
AND P.iGrado = @iGrado;
OPEN cGrupos;
FETCH cGrupos INTO @idGrupo;
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
SET @iCont = 0;
SET @dPromedio = 0;
SELECT @iCont = COUNT(DISTINCT P.idAsignatura) ,
@dPromedio = AVG(P.dPromedio)
FROM @Promedios P
WHERE P.idPlantel = @idPlantel
AND P.idOfEduc = @idOfEduc
AND P.iGrado = @iGrado
AND P.idGrupo = @idGrupo;
UPDATE @Promedios
SET iContAsignaturas = @iCont ,
dPromedioGrupo = @dPromedio
WHERE idPlantel = @idPlantel
AND idOfEduc = @idOfEduc
AND iGrado = @iGrado
AND idGrupo = @idGrupo;
---------------------------------------------------------------------
DECLARE cAsignaturas CURSOR LOCAL
FOR
SELECT DISTINCT
P.idAsignatura
FROM @Promedios P
WHERE P.idPlantel = @idPlantel
AND P.idOfEduc = @idOfEduc
AND P.iGrado = @iGrado
AND P.idGrupo = @idGrupo;
OPEN cAsignaturas;
FETCH cAsignaturas INTO @idAsignatura;
WHILE ( @@FETCH_STATUS = 0 )
BEGIN
SET @iCont = 0;
SELECT @iCont = COUNT(DISTINCT P.idEvaluacion) ,
@dPromedio = AVG(P.dPromedio)
FROM @Promedios P
WHERE P.idPlantel = @idPlantel
AND P.idOfEduc = @idOfEduc
AND P.iGrado = @iGrado
AND P.idGrupo = @idGrupo
AND P.idAsignatura = @idAsignatura;
UPDATE @Promedios
SET iContEvaluaciones = @iCont ,
dPromedioAsignaturas = @dPromedio
WHERE idPlantel = @idPlantel
AND idOfEduc = @idOfEduc
AND iGrado = @iGrado
AND idGrupo = @idGrupo
AND idAsignatura = @idAsignatura;
FETCH cAsignaturas INTO @idAsignatura;
END;
CLOSE cAsignaturas;
DEALLOCATE cAsignaturas;
---------------------------------------------------------------------
FETCH cGrupos INTO @idGrupo;
END;
CLOSE cGrupos;
DEALLOCATE cGrupos;
---------------------------------------------------------------------
FETCH cGrados INTO @iGrado;
END;
CLOSE cGrados;
DEALLOCATE cGrados;
---------------------------------------------------------------------
FETCH cOfertas INTO @idOfEduc;
END;
CLOSE cOfertas;
DEALLOCATE cOfertas;
---------------------------------------------------------------------
FETCH cPlanteles INTO @idPlantel;
END;
CLOSE cPlanteles;
DEALLOCATE cPlanteles;
SELECT ROW_NUMBER() OVER ( ORDER BY P.sPlantel , P.sOfEduc , P.iGrado , P.sGrupo , P.iOrdenAsignatura , P.iOrdenEvaluacion ) AS iNo ,
P.sEscuela ,
P.dPromedioEscuela ,
P.iContPlanteles ,
P.idPlantel ,
P.sPlantel ,
P.dPromedioPlantel ,
P.iContOfertas ,
P.idOfEduc ,
P.sOfEduc ,
P.dPromedioOferta ,
P.iContGrados ,
P.iGrado ,
P.sGrado ,
P.dPromedioGrado ,
P.iContGrupos ,
P.idGrupo ,
P.sGrupo ,
P.dPromedioGrupo ,
P.iContAsignaturas ,
P.idAsignatura ,
P.sAsignatura ,
P.iOrdenAsignatura ,
P.dPromedioAsignaturas ,
P.iContEvaluaciones ,
P.idEvaluacion ,
P.sEvaluacion ,
P.iOrdenEvaluacion ,
P.dPromedio
FROM @Promedios P;
END;
以上是关于sql Correcciónparamostrar datos en el informe de“Indicador de promedios generales” - TICKET BI的主要内容,如果未能解决你的问题,请参考以下文章
sql Correccióndelistado de enrolados a un Curso-Actividad - EducaciónConcontinua
sql Correccióndelistado de enrolados a un Curso-Actividad - EducaciónConcontinuaSPRINT 5
sql spListarHorariosGlobalSinColumnas - Correccióndecambios para mostrar listado de materias c
sql spListarHorariosGlobalConColumnas - Correccióndecambios para mostrar listado de materias c
sql Correcciónparamostrar datos en el informe de“Indicador de promedios generales” - TICKET BI