DROP PROCEDURE IF EXISTS uspGetAtlag GO CREATE PROCEDURE uspGetAtlag @pOsztalyCsoportId int ,@pTantargyId int ,@pAtlagMegjelenitesTipus int ,@pAtlagbaBeleszamitoOsztalyTipus int ,@pErtekelesTipusa int AS BEGIN SET NOCOUNT ON; DECLARE @CurrentDate DATE = CONVERT(date, GETDATE()) IF (@pAtlagbaBeleszamitoOsztalyTipus = 1) BEGIN IF (@pAtlagMegjelenitesTipus = 1) /* Összes jegy átlaga minden tanuló */ SELECT te.C_TANTARGYID ,te.C_OSZTALYCSOPORTID ,ROUND(SUM(CAST(d.C_VALUE AS float) * CAST(ISNULL(ta.C_SULY, 100) AS float) / 100) / SUM(CAST(ISNULL(ta.C_SULY, 100) AS float) / 100), 2) AS Atlag FROM T_TANULOERTEKELES te INNER JOIN T_OSZTALYZATTIPUS ot ON te.C_ERTEKELESOSZTALYZATID = ot.ID INNER JOIN T_DICTIONARYITEMBASE d ON ot.ID = d.ID LEFT JOIN T_TANARIATLAGSULY ta ON te.C_ERTEKELESMODID = ta.C_ERTEKELESMODID WHERE te.C_TANTARGYID = @pTantargyId AND te.C_OSZTALYCSOPORTID = @pOsztalyCsoportId AND te.C_TIPUSID = @pErtekelesTipusa AND te.C_ERTEKELESOSZTALYZATID IS NOT NULL GROUP BY te.C_TANTARGYID ,te.C_OSZTALYCSOPORTID IF (@pAtlagMegjelenitesTipus = 2) /* Átlagok átlaga minden tanuló */ SELECT ertekeles.C_TANTARGYID ,ertekeles.C_OSZTALYCSOPORTID ,ROUND(AVG(ertekeles.Atlag), 2) AS Atlag FROM ( SELECT te.C_TANTARGYID ,te.C_OSZTALYCSOPORTID ,te.C_TANULOID ,ROUND(SUM(CAST(d.C_VALUE AS float) * CAST(ISNULL(ta.C_SULY, 100) AS float) / 100) / SUM(CAST(ISNULL(ta.C_SULY, 100) AS float) / 100), 2) AS Atlag FROM T_TANULOERTEKELES te INNER JOIN T_OSZTALYZATTIPUS ot ON te.C_ERTEKELESOSZTALYZATID = ot.ID INNER JOIN T_DICTIONARYITEMBASE d ON ot.ID = d.ID LEFT JOIN T_TANARIATLAGSULY ta ON te.C_ERTEKELESMODID = ta.C_ERTEKELESMODID WHERE te.C_TANTARGYID = @pTantargyId AND te.C_OSZTALYCSOPORTID = @pOsztalyCsoportId AND te.C_TIPUSID = @pErtekelesTipusa AND te.C_ERTEKELESOSZTALYZATID IS NOT NULL GROUP BY te.C_TANTARGYID ,te.C_OSZTALYCSOPORTID,te.C_TANULOID ) ertekeles GROUP BY ertekeles.C_TANTARGYID ,ertekeles.C_OSZTALYCSOPORTID END IF (@pAtlagbaBeleszamitoOsztalyTipus = 2) BEGIN IF (@pAtlagMegjelenitesTipus = 1) /* Összes jegy átlaga minden tanulóra, aki az osztályban jelenleg van */ SELECT te.C_TANTARGYID ,te.C_OSZTALYCSOPORTID ,ROUND(SUM(CAST(d.C_VALUE AS float) * CAST(ISNULL(ta.C_SULY, 100) AS float) / 100) / SUM(CAST(ISNULL(ta.C_SULY, 100) AS float) / 100), 2) AS Atlag FROM T_TANULOERTEKELES te INNER JOIN T_TANEV Tanev ON Tanev.ID = te.C_TANEVID INNER JOIN T_OSZTALYZATTIPUS ot ON te.C_ERTEKELESOSZTALYZATID = ot.ID INNER JOIN T_DICTIONARYITEMBASE d ON ot.ID = d.ID LEFT JOIN T_TANARIATLAGSULY ta ON te.C_ERTEKELESMODID = ta.C_ERTEKELESMODID INNER JOIN T_TANULOCSOPORT tcs ON tcs.C_OSZTALYCSOPORTID = te.C_OSZTALYCSOPORTID AND tcs.C_TANULOID = te.C_TANULOID AND tcs.C_BELEPESDATUM <= @CurrentDate AND (tcs.C_KILEPESDATUM > @CurrentDate OR tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= Tanev.C_UTOLSOTANITASINAP) WHERE te.C_TANTARGYID = @pTantargyId AND te.C_OSZTALYCSOPORTID = @pOsztalyCsoportId AND te.C_TIPUSID = @pErtekelesTipusa AND te.C_ERTEKELESOSZTALYZATID IS NOT NULL GROUP BY te.C_TANTARGYID ,te.C_OSZTALYCSOPORTID IF (@pAtlagMegjelenitesTipus = 2) /* Átlagok átlaga minden tanulóra, aki az osztályban jelenleg van */ SELECT ertekeles.C_TANTARGYID ,ertekeles.C_OSZTALYCSOPORTID ,ROUND(AVG(ertekeles.Atlag), 2) AS Atlag FROM ( SELECT te.C_TANTARGYID ,te.C_OSZTALYCSOPORTID ,te.C_TANULOID ,ROUND(SUM(CAST(d.C_VALUE AS float) * CAST(ISNULL(ta.C_SULY, 100) AS float) / 100) / SUM(CAST(ISNULL(ta.C_SULY, 100) AS float) / 100), 2) AS Atlag FROM T_TANULOERTEKELES te INNER JOIN T_TANEV Tanev ON Tanev.ID = te.C_TANEVID INNER JOIN T_OSZTALYZATTIPUS ot ON te.C_ERTEKELESOSZTALYZATID = ot.ID INNER JOIN T_DICTIONARYITEMBASE d ON ot.ID = d.ID LEFT JOIN T_TANARIATLAGSULY ta ON te.C_ERTEKELESMODID = ta.C_ERTEKELESMODID INNER JOIN T_TANULOCSOPORT tcs ON tcs.C_OSZTALYCSOPORTID = te.C_OSZTALYCSOPORTID AND tcs.C_TANULOID = te.C_TANULOID AND tcs.C_BELEPESDATUM <= @CurrentDate AND (tcs.C_KILEPESDATUM > @CurrentDate OR tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= Tanev.C_UTOLSOTANITASINAP) WHERE te.C_TANTARGYID = @pTantargyId AND te.C_OSZTALYCSOPORTID = @pOsztalyCsoportId AND te.C_TIPUSID = @pErtekelesTipusa AND te.C_ERTEKELESOSZTALYZATID IS NOT NULL GROUP BY te.C_TANTARGYID ,te.C_OSZTALYCSOPORTID,te.C_TANULOID ) ertekeles GROUP BY ertekeles.C_TANTARGYID ,ertekeles.C_OSZTALYCSOPORTID END END GO