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

sql Wypinaniewnioskówzról