SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF OBJECT_ID('[dbo].[sp_GetPedagogusAltalAdottErtekelesek]') IS NOT NULL BEGIN DROP PROCEDURE [dbo].[sp_GetPedagogusAltalAdottErtekelesek] END GO CREATE PROCEDURE [dbo].[sp_GetPedagogusAltalAdottErtekelesek] @pTanarId INT, @pEvkozi INT, @pFelevi INT, @pEvvegi INT, @pTanevId INT, @pFelevVegeNaptipusId INT, @pErtekelesmodSuly BIT = 0 AS BEGIN DECLARE @osztalyId INT = 0; DECLARE @tantargyId INT = 0; DECLARE @rowId INT = 0; DECLARE @maxCharNumErtekelesSzoveg INT = 20; SET NOCOUNT ON; DECLARE @felevVege DATE = ( SELECT COALESCE( (SELECT C_DATUM FROM T_TANEVRENDJE WHERE C_TANEVID = @pTanevId AND C_NAPTIPUSA = @pFelevVegeNaptipusId), GETDATE() ) ); SELECT T_TANARIATLAGSULY.C_ERTEKELESMODID AS ID, T_DICTIONARYITEMBASE.C_NAME, T_TANARIATLAGSULY.C_ERTEKELESMODID, C_SULY, CAST(C_SULY AS NVARCHAR) + '%' AS C_SULYSZAZALEK, ' (' + NCHAR(97 + ROW_NUMBER() OVER(ORDER BY T_DICTIONARYITEMBASE.C_ORDER ASC) - 1) + ')' AS Row# INTO #tempTanariAtlagsuly FROM T_TANARIATLAGSULY INNER JOIN T_ERTEKELESMOD ON T_ERTEKELESMOD.ID = T_TANARIATLAGSULY.C_ERTEKELESMODID LEFT JOIN T_DICTIONARYITEMBASE ON T_DICTIONARYITEMBASE.ID = T_ERTEKELESMOD.ID WHERE T_TANARIATLAGSULY.TOROLT = 'F' AND T_TANARIATLAGSULY.C_TANEVID = @pTanevId AND T_DICTIONARYITEMBASE.TOROLT = 'F' AND T_DICTIONARYITEMBASE.C_TANEVID = @pTanevId ORDER BY T_DICTIONARYITEMBASE.C_ORDER; SELECT DISTINCT ROW_NUMBER ( ) OVER (ORDER BY TARGYKATEGSORREND, EVFOLYAMSORREND, OSZTALYCSOPORTNEV, TARGYNEV) AS SORSZAM, TANTARGYID, OSZTALYID, CAST(ROW_NUMBER ( ) OVER (ORDER BY TARGYKATEGSORREND, EVFOLYAMSORREND, OSZTALYCSOPORTNEV, TARGYNEV) AS NVARCHAR(10)) + '. ' + NEV AS NEV INTO #tempFoglalkozasok FROM ( SELECT DISTINCT T_TANTARGY_OSSZES.ID AS TANTARGYID, T_OSZTALYCSOPORT_OSSZES.ID AS OSZTALYID, TARGYKATEG.C_ORDER AS TARGYKATEGSORREND, EVFOLYAM.C_ORDER AS EVFOLYAMSORREND, T_OSZTALYCSOPORT_OSSZES.C_NEV AS OSZTALYCSOPORTNEV, T_TANTARGY_OSSZES.C_NEV AS TARGYNEV, T_OSZTALYCSOPORT_OSSZES.C_NEV + '-' + T_TANTARGY_OSSZES.C_NEV AS NEV FROM T_FOGLALKOZAS_OSSZES INNER JOIN T_OSZTALYCSOPORT_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_FOGLALKOZAS_OSSZES.C_OSZTALYCSOPORTID INNER JOIN T_TANTARGY_OSSZES ON T_TANTARGY_OSSZES.ID = T_FOGLALKOZAS_OSSZES.C_TANTARGYID LEFT JOIN T_DICTIONARYITEMBASE AS TARGYKATEG ON TARGYKATEG.ID = T_TANTARGY_OSSZES.C_TARGYKATEGORIA AND TARGYKATEG.C_TANEVID = T_TANTARGY_OSSZES.C_TANEVID LEFT JOIN T_DICTIONARYITEMBASE AS EVFOLYAM ON EVFOLYAM.ID = T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA AND EVFOLYAM.C_TANEVID = T_OSZTALYCSOPORT_OSSZES.C_TANEVID WHERE T_FOGLALKOZAS_OSSZES.TOROLT = 'F' AND T_TANTARGY_OSSZES.TOROLT = 'F' AND T_OSZTALYCSOPORT_OSSZES.TOROLT = 'F' AND T_FOGLALKOZAS_OSSZES.C_TANARID = @pTanarId AND T_FOGLALKOZAS_OSSZES.C_TANEVID = @pTanevId UNION SELECT DISTINCT T_TANTARGY_OSSZES.ID AS TANTARGYID, T_OSZTALYCSOPORT_OSSZES.ID AS OSZTALYID, TARGYKATEG.C_ORDER AS TARGYKATEGSORREND, EVFOLYAM.C_ORDER AS EVFOLYAMSORREND, T_OSZTALYCSOPORT_OSSZES.C_NEV AS OSZTALYCSOPORTNEV, T_TANTARGY_OSSZES.C_NEV AS TARGYNEV, T_OSZTALYCSOPORT_OSSZES.C_NEV + '-' + T_TANTARGY_OSSZES.C_NEV AS NEV FROM T_TANULOERTEKELES_OSSZES INNER JOIN T_OSZTALYCSOPORT_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_TANULOERTEKELES_OSSZES.C_OSZTALYCSOPORTID INNER JOIN T_TANTARGY_OSSZES ON T_TANTARGY_OSSZES.ID = T_TANULOERTEKELES_OSSZES.C_TANTARGYID LEFT JOIN T_DICTIONARYITEMBASE AS TARGYKATEG ON TARGYKATEG.ID = T_TANTARGY_OSSZES.C_TARGYKATEGORIA AND TARGYKATEG.C_TANEVID = T_TANTARGY_OSSZES.C_TANEVID LEFT JOIN T_DICTIONARYITEMBASE AS EVFOLYAM ON EVFOLYAM.ID = T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA AND EVFOLYAM.C_TANEVID = T_OSZTALYCSOPORT_OSSZES.C_TANEVID WHERE T_TANULOERTEKELES_OSSZES.TOROLT = 'F' AND T_TANTARGY_OSSZES.TOROLT = 'F' AND T_OSZTALYCSOPORT_OSSZES.TOROLT = 'F' AND T_TANULOERTEKELES_OSSZES.C_ERTEKELOID = @pTanarId AND T_TANULOERTEKELES_OSSZES.C_TANEVID = @pTanevId ) AS FOGLALKOZASOK ORDER BY SORSZAM; DECLARE @tempErtekeles TABLE (ID INT, TANULOID INT, NEV NVARCHAR(255), C_BELEPESDATUM NVARCHAR(15), C_KILEPESDATUM NVARCHAR(15), OSZTID INT, ERTEKELESDATUMA NVARCHAR(255), ERTEKELESTIPUSA INT, ERTEKELESMODJA INT, ERTEKELES NVARCHAR(MAX), OSZTALYZAT INT, HONAP INT); SELECT * FROM #tempFoglalkozasok ORDER BY SORSZAM; WHILE (1 = 1) BEGIN DELETE FROM @tempErtekeles; SELECT TOP 1 @rowId = SORSZAM, @tantargyId = TANTARGYID, @osztalyId = OSZTALYID FROM #tempFoglalkozasok WHERE SORSZAM > @rowId ORDER BY SORSZAM; IF @@ROWCOUNT = 0 BEGIN BREAK; END INSERT INTO @tempErtekeles SELECT * FROM ( SELECT DISTINCT T_TANULOERTEKELES_OSSZES.ID, T_TANULOCSOPORT_OSSZES.C_TANULOID AS TANULOID, T_FELHASZNALO_OSSZES.C_NYOMTATASINEV AS NEV, COALESCE(FORMAT(T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM, 'yyyy. MM. dd'), '') AS C_BELEPESDATUM, COALESCE(FORMAT(T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM, 'yyyy. MM. dd'), '') AS C_KILEPESDATUM, T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID AS OSZTID, T_TANULOERTEKELES_OSSZES.C_DATUM AS ERTEKELESDATUMA, T_TANULOERTEKELES_OSSZES.C_TIPUSID AS ERTEKELESTIPUSA, T_TANULOERTEKELES_OSSZES.C_ERTEKELESMODID AS ERTEKELESMODJA, ( (CASE WHEN C_TIPUSID NOT IN (@pEvkozi, @pFelevi, @pEvvegi) THEN '{' ELSE '' END) + COALESCE(CONVERT(NVARCHAR, TDIB_JEGY.C_VALUE), (CASE WHEN C_ERTEKELESSZOVEG IS NOT NULL THEN '[' + CASE WHEN LEN(C_ERTEKELESSZOVEG) > @maxCharNumErtekelesSzoveg THEN STUFF(C_ERTEKELESSZOVEG, @maxCharNumErtekelesSzoveg, 1000000, '...') ELSE C_ERTEKELESSZOVEG END + ']' ELSE NULL END), CONVERT(NVARCHAR, C_ERTEKELESSZAZALEK) + '%') + (CASE WHEN C_TIPUSID NOT IN (@pEvkozi, @pFelevi, @pEvvegi) THEN '}' ELSE '' END) + (CASE WHEN @pErtekelesmodSuly = 1 AND C_TIPUSID IN (@pEvkozi) AND ISNULL(TANARIATLAGSULY.C_SULY, 100) <> 100 THEN TANARIATLAGSULY.Row# ELSE '' END) ) AS ERTEKELES, TDIB_JEGY.C_VALUE AS OSZTALYZAT, (CASE WHEN MONTH(C_DATUM) >= 9 THEN 100 WHEN MONTH(C_DATUM) > 1 AND MONTH(C_DATUM) < 9 THEN 200 ELSE (CASE WHEN C_DATUM > @felevVege THEN 200 ELSE 100 END) END) + MONTH(C_DATUM) AS HONAP FROM T_TANULOCSOPORT_OSSZES INNER JOIN T_FELHASZNALO_OSSZES ON T_FELHASZNALO_OSSZES.ID = T_TANULOCSOPORT_OSSZES.C_TANULOID LEFT JOIN T_TANULOERTEKELES_OSSZES ON T_TANULOERTEKELES_OSSZES.C_TANTARGYID = @tantargyId AND T_TANULOERTEKELES_OSSZES.C_TANULOID = T_TANULOCSOPORT_OSSZES.C_TANULOID AND T_TANULOERTEKELES_OSSZES.TOROLT = 'F' AND T_TANULOERTEKELES_OSSZES.C_TANEVID = @pTanevId AND T_TANULOERTEKELES_OSSZES.C_ERTEKELOID = @pTanarId --NOTE: Az évfolyamváltot tanulók szűréséhez kell! -- INNEN INNER JOIN T_TANULOCSOPORT_OSSZES TanuloCsoport ON TanuloCsoport.C_TANULOID = T_TANULOERTEKELES_OSSZES.C_TANULOID AND TanuloCsoport.TOROLT = 'F' AND TanuloCsoport.C_BELEPESDATUM <= GETDATE() AND (TanuloCsoport.C_KILEPESDATUM IS NULL OR TanuloCsoport.C_KILEPESDATUM > GETDATE()) INNER JOIN T_OSZTALY_OSSZES Osztaly ON Osztaly.ID = TanuloCsoport.C_OSZTALYCSOPORTID AND Osztaly.TOROLT = 'F' INNER JOIN T_OSZTALYCSOPORT_OSSZES OsztalyCsoport ON OsztalyCsoport.ID = Osztaly.ID AND OsztalyCsoport.TOROLT = 'F' LEFT JOIN T_OSZTALYCSOPORT_OSSZES OsztalyEvfolyamSzures ON OsztalyEvfolyamSzures.ID = T_TANULOERTEKELES_OSSZES.C_ROGZITESKORITANULOOSZTALYID AND OsztalyEvfolyamSzures.TOROLT = 'F' AND OsztalyEvfolyamSzures.C_EVFOLYAMTIPUSA = OsztalyCsoport.C_EVFOLYAMTIPUSA --NOTE: Az évfolyamváltot tanulók szűréséhez kell! EDDIG LEFT JOIN T_DICTIONARYITEMBASE_OSSZES AS TDIB_JEGY ON TDIB_JEGY.ID = T_TANULOERTEKELES_OSSZES.C_ERTEKELESOSZTALYZATID AND TDIB_JEGY.TOROLT = 'F' AND TDIB_JEGY.C_TANEVID = @pTanevId LEFT JOIN #tempTanariAtlagsuly AS TANARIATLAGSULY on TANARIATLAGSULY.C_ERTEKELESMODID = T_TANULOERTEKELES_OSSZES.C_ERTEKELESMODID WHERE T_TANULOCSOPORT_OSSZES.C_TANEVID = @pTanevId AND T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = @osztalyId AND T_TANULOCSOPORT_OSSZES.TOROLT = 'F' --NOTE: AMI-s értékelések miatt, ott nincs mentve C_ROGZITESKORITANULOOSZTALYID AND ((T_TANULOERTEKELES_OSSZES.C_ROGZITESKORITANULOOSZTALYID IS NULL) OR (OsztalyEvfolyamSzures.ID IS NOT NULL)) ) AS tempErtekeles; SELECT CAST(ROW_NUMBER ( ) OVER (ORDER BY NEV) AS NVARCHAR(10)) + '.' AS "#", RESULT.* FROM ( SELECT PIVOTERTEKEL.TANULOID AS ID, NEV AS "Név", BESOROLAS AS "Csoport tagja", [109] AS Szeptember, [110] AS Október, [111] AS November, [112] AS December, [101] AS "Január / I.", FELEV.JEGY AS [I. félév$@8], [201] AS "Január / II.", [202] AS Február, [203] AS Március, [204] AS Április, [205] AS Május, [206] AS Június, EVVEGE.JEGY AS [II. félév$@9], ATLAG.SULYOZOTTATLAG AS "Átlag" FROM ( SELECT DISTINCT T1.NEV, T1.C_BELEPESDATUM + ' - ' + T1.C_KILEPESDATUM AS BESOROLAS, STUFF ( (SELECT ', ' + ISNULL(T2.ERTEKELES, '') FROM @tempErtekeles AS T2 WHERE T1.TANULOID = T2.TANULOID AND T1.HONAP = T2.HONAP AND T1.ERTEKELESTIPUSA NOT IN (@pFelevi, @pEvvegi) AND T2.ERTEKELESTIPUSA NOT IN (@pFelevi, @pEvvegi) -- = @pEvkozi--AND T1.ERTEKELESTIPUSA = @pEvkozi ORDER BY ERTEKELESDATUMA FOR XML PATH ('') ), 1, 2, '') AS ERTEKELESEK, T1.HONAP, T1.TANULOID FROM @tempErtekeles AS T1 ) AS ERDEMJEGYEK PIVOT ( MAX(ERTEKELESEK) FOR HONAP IN ([109], [110], [111], [112], [101], [201], [202], [203], [204], [205], [206])) AS PIVOTERTEKEL LEFT JOIN ( SELECT TANULOID, AVG(OSZTALYZAT) AS JEGY FROM @tempErtekeles WHERE ERTEKELESTIPUSA = @pFelevi GROUP BY TANULOID ) AS FELEV ON PIVOTERTEKEL.TANULOID = FELEV.TANULOID LEFT JOIN ( SELECT TANULOID, AVG(OSZTALYZAT) AS JEGY FROM @tempErtekeles WHERE ERTEKELESTIPUSA = @pEvvegi GROUP BY TANULOID ) AS EVVEGE ON PIVOTERTEKEL.TANULOID = EVVEGE.TANULOID LEFT JOIN ( SELECT TANULOID, ROUND(AVG(CAST(OSZTALYZAT AS FLOAT)), 2) AS ATLAG, ROUND(SUM(CAST(OSZTALYZAT AS FLOAT) * CAST(ISNULL(T_TANARIATLAGSULY.C_SULY, 100) AS FLOAT) / 100) / SUM(CAST(ISNULL(T_TANARIATLAGSULY.C_SULY, 100) AS FLOAT) / 100), 2) AS SULYOZOTTATLAG FROM @tempErtekeles AS tempErtekeles LEFT JOIN T_TANARIATLAGSULY on T_TANARIATLAGSULY.C_ERTEKELESMODID = tempErtekeles.ERTEKELESMODJA AND T_TANARIATLAGSULY.TOROLT = 'F' AND T_TANARIATLAGSULY.C_TANEVID = @pTanevId WHERE ERTEKELESTIPUSA = @pEvkozi AND OSZTALYZAT IS NOT NULL GROUP BY TANULOID ) AS ATLAG ON PIVOTERTEKEL.TANULOID = ATLAG.TANULOID ) AS RESULT ORDER BY NEV; END SELECT ID, Row# AS "Jelmagyarázat", C_NAME AS "Értékelésmód", C_SULYSZAZALEK AS "Értékelés súlyozása" FROM #tempTanariAtlagsuly ORDER BY Row#; IF OBJECT_ID('tempdb..#tempErtekeles') IS NOT NULL DROP TABLE #tempErtekeles IF OBJECT_ID('tempdb..#tempFoglalkozasok') IS NOT NULL DROP TABLE #tempFoglalkozasok IF OBJECT_ID('tempdb..#tempTanariAtlagsuly') IS NOT NULL DROP TABLE #tempTanariAtlagsuly END GO