271 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			271 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
SET ANSI_NULLS ON
 | 
						|
GO
 | 
						|
SET QUOTED_IDENTIFIER ON
 | 
						|
GO
 | 
						|
 | 
						|
IF OBJECT_ID('[dbo].[sp_GenerateErtekelesekTempTabla]') IS NOT NULL
 | 
						|
BEGIN
 | 
						|
	DROP PROCEDURE [dbo].[sp_GenerateErtekelesekTempTabla]
 | 
						|
END
 | 
						|
GO
 | 
						|
 | 
						|
-- =============================================
 | 
						|
-- Description:	<Előszedi a tanuló értékeléseket, havi bontásban tantárgy és osztálycsoport alapján>
 | 
						|
-- NOTE: EZT A HÁROM TÁROLT ELJÁRÁST EGYBEN KELL KEZELNI, HA MÓDOSÍTJUK!!!	
 | 
						|
--		-	sp_GenerateErtekelesekTempTabla
 | 
						|
--		-	sp_GenerateErtekelesekMagatartasSzorgalomTempTabla
 | 
						|
--		-	sp_GenerateErtekelesekTempTablaByTanulo
 | 
						|
-- =============================================
 | 
						|
 | 
						|
CREATE PROCEDURE [dbo].[sp_GenerateErtekelesekTempTabla]
 | 
						|
	 @pTantargyId				INT
 | 
						|
	,@pOsztalyCsoportId			INT
 | 
						|
	,@pFelevVegeDatum			DATE
 | 
						|
	,@pErtekelesTipusEvkozi		INT
 | 
						|
	,@pErtekelesTipusFelevi		INT
 | 
						|
	,@pErtekelesTipusEvvegi		INT
 | 
						|
	,@pDatum					DATE = NULL
 | 
						|
AS
 | 
						|
BEGIN
 | 
						|
 | 
						|
	-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
 | 
						|
	SET NOCOUNT ON;
 | 
						|
	
 | 
						|
	IF @pDatum IS NULL
 | 
						|
		SET @pDatum = GETDATE()
 | 
						|
 | 
						|
	DECLARE @TempDictionaryItem TABLE (
 | 
						|
		 ID				INT PRIMARY KEY
 | 
						|
		,C_VALUE		INT
 | 
						|
		,C_ORDER		INT
 | 
						|
		,C_INTEZMENYID	INT
 | 
						|
		,C_TANEVID		INT
 | 
						|
	)
 | 
						|
				  
 | 
						|
	INSERT INTO @TempDictionaryItem
 | 
						|
	SELECT
 | 
						|
		 ID
 | 
						|
		,C_VALUE
 | 
						|
		,C_ORDER
 | 
						|
		,C_INTEZMENYID
 | 
						|
		,C_TANEVID
 | 
						|
	FROM 
 | 
						|
		T_DICTIONARYITEMBASE 
 | 
						|
	WHERE 
 | 
						|
			C_TYPE IN ('OsztalyzatTipus')
 | 
						|
		AND TOROLT = 'F'
 | 
						|
 | 
						|
	DECLARE @TempTanuloErtekeles TABLE (
 | 
						|
		 ID							INT
 | 
						|
		,Datum						NVARCHAR(255)
 | 
						|
		,TipusId					INT
 | 
						|
		,TanuloId					INT
 | 
						|
		,TanuloNev					NVARCHAR(255)
 | 
						|
		,AnyjaNeve					NVARCHAR(255)
 | 
						|
		,SzuletesiIdo				DATE
 | 
						|
		,OsztalyNev					NVARCHAR(255)
 | 
						|
		,Honap						NVARCHAR(2)
 | 
						|
		,ErtekelesOsztalyzat		INT
 | 
						|
		,ErtekelesSzoveg			NVARCHAR(MAX)
 | 
						|
		,ErtekelesSzovegRovidNev	NVARCHAR(3)
 | 
						|
		,ErtekelesSzazalek			INT
 | 
						|
		,Suly						INT
 | 
						|
	)
 | 
						|
 | 
						|
	INSERT INTO @TempTanuloErtekeles
 | 
						|
	SELECT DISTINCT *
 | 
						|
    FROM (
 | 
						|
		SELECT DISTINCT
 | 
						|
    		 tanuloErtekeles.ID							ID
 | 
						|
			,tanuloErtekeles.C_DATUM					Datum
 | 
						|
			,tanuloErtekeles.C_TIPUSID					TipusId
 | 
						|
			,tanuloCsoport.C_TANULOID					TanuloId
 | 
						|
			,felhasznalo.C_NYOMTATASINEV				TanuloNev
 | 
						|
			,felhasznalo.C_ANYJANEVE					AnyjaNeve
 | 
						|
			,felhasznalo.C_SZULETESIDATUM				SzuletesiIdo	
 | 
						|
			,osztalyCsoport.C_NEV						OsztalyNev		
 | 
						|
			,CASE WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusFelevi 
 | 
						|
					THEN 'I'
 | 
						|
				WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusEvvegi 
 | 
						|
					THEN 'II'
 | 
						|
				ELSE					
 | 
						|
					CASE 
 | 
						|
						WHEN CAST(tanuloErtekeles.C_DATUM AS DATE) > @pFelevVegeDatum
 | 
						|
							THEN CAST(MONTH(tanuloErtekeles.C_DATUM) + 1 AS NVARCHAR(2))
 | 
						|
							ELSE CAST(MONTH(tanuloErtekeles.C_DATUM) AS NVARCHAR(2))
 | 
						|
					END 
 | 
						|
				END										Honap
 | 
						|
			,ertekelesOsztalyzat.C_VALUE				ErtekelesOsztalyzat
 | 
						|
			,tanuloErtekeles.C_ERTEKELESSZOVEG			ErtekelesSzoveg
 | 
						|
			,tanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV	ErtekelesSzovegRovidNev
 | 
						|
			,tanuloErtekeles.C_ERTEKELESSZAZALEK		ErtekelesSzazalek
 | 
						|
			,tanariAtlagSuly.C_SULY						Suly
 | 
						|
		FROM (
 | 
						|
			SELECT
 | 
						|
				 C_TANULOID
 | 
						|
				,C_OSZTALYCSOPORTID
 | 
						|
			FROM
 | 
						|
				T_TANULOCSOPORT
 | 
						|
			WHERE
 | 
						|
					TOROLT = 'F'
 | 
						|
				AND C_BELEPESDATUM <= @pDatum
 | 
						|
				AND (C_KILEPESDATUM IS NULL OR C_KILEPESDATUM >= @pDatum)
 | 
						|
				AND C_OSZTALYCSOPORTID = @pOsztalyCsoportId
 | 
						|
			) AS tanuloCsoport
 | 
						|
			INNER JOIN (
 | 
						|
				SELECT 
 | 
						|
					 ID
 | 
						|
					,C_NYOMTATASINEV
 | 
						|
					,C_ANYJANEVE
 | 
						|
					,C_SZULETESIDATUM
 | 
						|
				FROM 
 | 
						|
					T_FELHASZNALO
 | 
						|
				WHERE 
 | 
						|
					TOROLT = 'F' 
 | 
						|
			) AS felhasznalo ON 
 | 
						|
				felhasznalo.ID = tanuloCsoport.C_TANULOID
 | 
						|
			LEFT JOIN 
 | 
						|
				T_OSZTALYCSOPORT osztalyCsoport ON
 | 
						|
						osztalyCsoport.ID = tanuloCsoport.C_OSZTALYCSOPORTID 
 | 
						|
					AND osztalyCsoport.TOROLT = 'F'
 | 
						|
			LEFT JOIN (
 | 
						|
				SELECT
 | 
						|
					 TanuloErtekeles.ID
 | 
						|
					,TanuloErtekeles.C_DATUM
 | 
						|
					,TanuloErtekeles.C_TIPUSID
 | 
						|
					,TanuloErtekeles.C_TANULOID
 | 
						|
					,TanuloErtekeles.C_ERTEKELESOSZTALYZATID
 | 
						|
					,TanuloErtekeles.C_ERTEKELESSZOVEG
 | 
						|
					,TanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV
 | 
						|
					,TanuloErtekeles.C_ERTEKELESSZAZALEK
 | 
						|
					,TanuloErtekeles.C_ERTEKELESMODID
 | 
						|
				FROM
 | 
						|
					T_TANULOERTEKELES TanuloErtekeles
 | 
						|
			INNER JOIN T_OSZTALYCSOPORT Osztaly ON
 | 
						|
					Osztaly.ID					= TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID
 | 
						|
				AND	Osztaly.TOROLT				= 'F'
 | 
						|
				AND Osztaly.C_EVFOLYAMTIPUSA	= (SELECT EvfolyamTipusId FROM dbo.fnGetTanuloOsztaly(TanuloErtekeles.C_TANULOID, DEFAULT))
 | 
						|
				WHERE
 | 
						|
						TanuloErtekeles.TOROLT = 'F' 
 | 
						|
					AND TanuloErtekeles.C_TANTARGYID = @pTantargyId
 | 
						|
			) AS tanuloErtekeles ON
 | 
						|
				tanuloErtekeles.C_TANULOID = tanuloCsoport.C_TANULOID
 | 
						|
			LEFT JOIN @TempDictionaryItem AS ertekelesOsztalyzat ON ertekelesOsztalyzat.ID = tanuloErtekeles.C_ERTEKELESOSZTALYZATID
 | 
						|
			LEFT JOIN T_TANARIATLAGSULY tanariAtlagSuly ON
 | 
						|
					tanariAtlagSuly.C_ERTEKELESMODID = tanuloErtekeles.C_ERTEKELESMODID 
 | 
						|
				AND tanuloErtekeles.C_ERTEKELESOSZTALYZATID IS NOT NULL
 | 
						|
				AND tanariAtlagSuly.TOROLT = 'F'
 | 
						|
    ) AS temp
 | 
						|
 | 
						|
	SELECT
 | 
						|
		 result.*
 | 
						|
		,result2.ErtkelesMentesseg
 | 
						|
		,result2.SzovegesenErtekelheto
 | 
						|
    FROM (
 | 
						|
		SELECT 
 | 
						|
			 pivotErtekelesek.TanuloId			ID
 | 
						|
			,pivotErtekelesek.TanuloId			TanuloId
 | 
						|
			,TanuloNev							TanuloNev
 | 
						|
			,AnyjaNeve							AnyjaNeve
 | 
						|
			,SzuletesiIdo						SzuletesiIdo
 | 
						|
			,OsztalyNev							OsztalyNev
 | 
						|
			,@pTantargyId						TantargyId
 | 
						|
			,[9]								[09]
 | 
						|
			,[10]								[10]
 | 
						|
			,[11]								[11]
 | 
						|
			,[12]								[12]
 | 
						|
			,[1]								[01I]
 | 
						|
			,[2]								[01II]
 | 
						|
			,[3]								[02]
 | 
						|
			,[4]								[03]
 | 
						|
			,[5]								[04]
 | 
						|
			,[6]								[05]
 | 
						|
			,[7]								[06]
 | 
						|
			,[I]								[I]
 | 
						|
			,[II]								[II]
 | 
						|
			,atlag.Jegy							Atlag
 | 
						|
		FROM (
 | 
						|
			SELECT DISTINCT
 | 
						|
				 tempErtekeles1.TanuloId
 | 
						|
				,tempErtekeles1.TanuloNev
 | 
						|
				,tempErtekeles1.AnyjaNeve
 | 
						|
				,tempErtekeles1.SzuletesiIdo
 | 
						|
				,tempErtekeles1.OsztalyNev
 | 
						|
				,tempErtekeles1.Honap
 | 
						|
				,STUFF (
 | 
						|
					(SELECT 
 | 
						|
						','
 | 
						|
						+ ISNULL(CAST(tempErtekeles2.ErtekelesOsztalyzat AS VARCHAR(1)), '')
 | 
						|
						+ ISNULL(CAST(
 | 
						|
							CASE
 | 
						|
								WHEN tempErtekeles2.ErtekelesSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.ErtekelesSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = ''
 | 
						|
									THEN NULL 
 | 
						|
								ELSE
 | 
						|
									ISNULL(tempErtekeles2.ErtekelesSzovegRovidNev, 'sz')
 | 
						|
							END AS VARCHAR(3)), '')
 | 
						|
						+ ISNULL(CAST(tempErtekeles2.ErtekelesSzazalek AS VARCHAR(3)), '')
 | 
						|
					FROM 
 | 
						|
						@TempTanuloErtekeles tempErtekeles2
 | 
						|
					WHERE 
 | 
						|
						tempErtekeles1.TanuloId = tempErtekeles2.TanuloId AND 
 | 
						|
						tempErtekeles1.Honap = tempErtekeles2.Honap
 | 
						|
					FOR XML PATH ('')
 | 
						|
					), 1, 1, ''
 | 
						|
				) TanuloErtekelesList
 | 
						|
			FROM 
 | 
						|
				@TempTanuloErtekeles tempErtekeles1
 | 
						|
		) AS erdemjegyek
 | 
						|
		PIVOT (
 | 
						|
			MAX(TanuloErtekelesList) 
 | 
						|
			FOR Honap 
 | 
						|
			IN ([I], [II], [9] ,[10] ,[11] ,[12] ,[1] ,[2] ,[3] ,[4] ,[5] ,[6], [7])
 | 
						|
		) AS pivotErtekelesek                             
 | 
						|
			LEFT JOIN (
 | 
						|
				SELECT 
 | 
						|
					 TanuloId		TanuloId
 | 
						|
					,ROUND (
 | 
						|
						SUM(CAST(ErtekelesOsztalyzat AS FLOAT) * CAST(ISNULL(Suly, 100) AS FLOAT) / 100) / SUM(CAST(ISNULL(Suly, 100) AS FLOAT) / 100), 2
 | 
						|
					 )				Jegy
 | 
						|
				FROM
 | 
						|
					@TempTanuloErtekeles
 | 
						|
				WHERE
 | 
						|
						TipusId = @pErtekelesTipusEvkozi
 | 
						|
					AND ErtekelesOsztalyzat IS NOT NULL
 | 
						|
				GROUP BY 
 | 
						|
					TanuloId
 | 
						|
			) AS atlag ON
 | 
						|
				pivotErtekelesek.TanuloId = atlag.TanuloId
 | 
						|
	) AS result
 | 
						|
		INNER JOIN (
 | 
						|
			SELECT DISTINCT
 | 
						|
				 felhasznalo.ID								ID
 | 
						|
				,felhasznalo.ID								TanuloId
 | 
						|
				,tanuloMentesseg.C_ERTEKELESMENTESITES		ErtkelesMentesseg
 | 
						|
				,tanuloMentesseg.C_SZOVEGESENERTEKELHETO	SzovegesenErtekelheto
 | 
						|
			FROM
 | 
						|
				T_TANULOCSOPORT AS tanuloCsoport
 | 
						|
			INNER JOIN T_FELHASZNALO felhasznalo ON 
 | 
						|
				felhasznalo.ID = tanuloCsoport.C_TANULOID
 | 
						|
			LEFT JOIN T_TANULOMENTESSEG tanuloMentesseg ON 
 | 
						|
					tanuloMentesseg.C_TANULOID = felhasznalo.ID
 | 
						|
				AND tanuloMentesseg.TOROLT = 'F'
 | 
						|
				AND tanuloMentesseg.C_TANTARGYID = @pTantargyId
 | 
						|
			    AND (tanuloMentesseg.C_KEZDETE IS NULL OR tanuloMentesseg.C_KEZDETE <= @pDatum)
 | 
						|
			    AND (tanuloMentesseg.C_VEGE IS NULL OR tanuloMentesseg.C_VEGE >= @pDatum)
 | 
						|
			WHERE 
 | 
						|
					tanuloCsoport.TOROLT = 'F'
 | 
						|
				AND tanuloCsoport.C_OSZTALYCSOPORTID = @pOsztalyCsoportId
 | 
						|
				AND tanuloCsoport.C_BELEPESDATUM <= @pDatum
 | 
						|
				AND (tanuloCsoport.C_KILEPESDATUM IS NULL OR tanuloCsoport.C_KILEPESDATUM >= @pDatum)
 | 
						|
		) AS result2 ON
 | 
						|
			result2.TanuloId = result.TanuloId
 | 
						|
	ORDER BY
 | 
						|
		result.TanuloNev
 | 
						|
		
 | 
						|
END
 | 
						|
 | 
						|
 | 
						|
GO
 | 
						|
 | 
						|
 |