DROP PROCEDURE IF EXISTS [uspGetDolgozatErtekelesAtlag] GO CREATE PROCEDURE [uspGetDolgozatErtekelesAtlag] @pIntezmenyId int ,@pTanevId int ,@pOsztalyCsoportId int ,@pTantargyId int ,@pTanarId int ,@pErtekelesTema nvarchar(255) ,@pAtlagTol float ,@pAtlagIg float ,@pErdemjegy5Tol int ,@pErdemjegy5Ig int ,@pErdemjegy4Tol int ,@pErdemjegy4Ig int ,@pErdemjegy3Tol int ,@pErdemjegy3Ig int ,@pErdemjegy2Tol int ,@pErdemjegy2Ig int ,@pErdemjegy1Tol int ,@pErdemjegy1Ig int ,@pNemIrtDolgozatotTol int ,@pNemIrtDolgozatotIg int ,@pSzuperOsztalyfonok int ,@pDatum datetime AS BEGIN SET NOCOUNT ON; DECLARE @preSql NVARCHAR(MAX), @mainSql NVARCHAR(MAX), @sql NVARCHAR(MAX) SET @pErtekelesTema = REPLACE(@pErtekelesTema, ' ', '') SET @preSql = IIF(@pSzuperOsztalyfonok = 1, N'', N' CREATE TABLE #OsztalyCsoportokTantargyak ( OsztalyCsoportId INT ,OsztalyCsoportNev nvarchar(255) ,TantargyId INT ,PRIMARY KEY(OsztalyCsoportId,TantargyId) ) INSERT INTO #OsztalyCsoportokTantargyak ( OsztalyCsoportId ,OsztalyCsoportNev ,TantargyId ) EXEC uspGetTanarAltalErtekelhetoCsoportokTantargyak @pTanarId ,@pTanevId ,@pDatum ') SET @mainSql = N' SELECT sub.Datum ,sub.OsztalyCsoport ,sub.OsztalyCsoportId ,sub.ErtekelesTema ,tgy.C_NEV AS TantargyNev ,sub.TantargyId ,sub.ErtekelesModId ,sub.Erdemjegy1 ,sub.Erdemjegy2 ,sub.Erdemjegy3 ,sub.Erdemjegy4 ,sub.Erdemjegy5 ,sub.Cnt IrtakDolgozatot ,(letszam.Letszam - sub.Cnt) NemIrtakDolgozatot ,CONVERT(nvarchar(255), sub.Cnt) + ''/'' + CONVERT(nvarchar(255), letszam.Letszam) AS IrtakDolgozatotArany ,ROUND(Total / CAST(Cnt AS Float), 2) AS Atlag ,letszam.Letszam FROM ( SELECT s.C_DATUM AS Datum ,s.OsztalyCsoportNev AS OsztalyCsoport ,s.C_OSZTALYCSOPORTID AS OsztalyCsoportId ,s.C_ERTEKELESTEMA AS ErtekelesTema ,s.C_TANTARGYID AS TantargyId ,s.C_ERTEKELESMODID AS ErtekelesModId ,s.[1501] AS Erdemjegy1 ,s.[1502] AS Erdemjegy2 ,s.[1503] AS Erdemjegy3 ,s.[1504] AS Erdemjegy4 ,s.[1505] AS Erdemjegy5 ,s.[1501] + s.[1502] + s.[1503] + s.[1504] + s.[1505] AS Cnt ,s.[1501] + s.[1502] * 2 + s.[1503] * 3 + s.[1504] * 4 + s.[1505] * 5 AS Total FROM ( SELECT er.C_DATUM ,er.C_OSZTALYCSOPORTID ,er.C_ERTEKELESTEMA ,er.C_TANTARGYID ,er.C_ERTEKELESOSZTALYZATID ,er.C_ERTEKELESMODID ,ocs.C_NEV AS OsztalyCsoportNev FROM T_TANULOERTEKELES_OSSZES er INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = er.C_OSZTALYCSOPORTID AND ocs.TOROLT=''F'' WHERE er.C_ERTEKELESMODID IN (1507, 1508) AND er.C_TANEVID = @pTanevId AND er.C_ISMAGATARTASSZORGALOM = ''F'' AND er.TOROLT = ''F'' AND er.C_ERTEKELESTEMA IS NOT NULL AND er.C_ERTEKELESOSZTALYZATID IS NOT NULL ' + IIF(@pSzuperOsztalyfonok = 1, N'', N'AND (EXISTS(SELECT 1 FROM #OsztalyCsoportokTantargyak ocst WHERE ocst.OsztalyCsoportId = er.C_OSZTALYCSOPORTID AND ocst.TantargyId = er.C_TANTARGYID))') + N' ' + IIF(@pTantargyId IS NULL, N'', N'AND er.C_TANTARGYID = @pTantargyId') + N' ' + IIF(@pErtekelesTema IS NULL, N'', N'AND REPLACE(er.C_ERTEKELESTEMA,'' '','''') LIKE ''%' + @pErtekelesTema + '%''') + N' ' + IIF(@pOsztalyCsoportId IS NULL, N'', N'AND er.C_OSZTALYCSOPORTID = @pOsztalyCsoportId') + N' ) x PIVOT (COUNT(C_ERTEKELESOSZTALYZATID) FOR C_ERTEKELESOSZTALYZATID IN ([1501], [1502], [1503], [1504], [1505]) ) s WHERE 1 = 1' + ' ' + IIF(@pErdemjegy5Tol IS NULL, N'', 'AND s.[1505] >= @pErdemjegy5Tol') + ' ' + IIF(@pErdemjegy5Ig IS NULL, N'', 'AND s.[1505] <= @pErdemjegy5Ig') + ' ' + IIF(@pErdemjegy4Tol IS NULL, N'', 'AND s.[1504] >= @pErdemjegy4Tol') + ' ' + IIF(@pErdemjegy4Ig IS NULL, N'', 'AND s.[1504] <= @pErdemjegy4Ig') + ' ' + IIF(@pErdemjegy3Tol IS NULL, N'', 'AND s.[1503] >= @pErdemjegy3Tol') + ' ' + IIF(@pErdemjegy3Ig IS NULL, N'', 'AND s.[1503] <= @pErdemjegy3Ig') + ' ' + IIF(@pErdemjegy2Tol IS NULL, N'', 'AND s.[1502] >= @pErdemjegy2Tol') + ' ' + IIF(@pErdemjegy2Ig IS NULL, N'', 'AND s.[1502] <= @pErdemjegy2Ig') + ' ' + IIF(@pErdemjegy1Tol IS NULL, N'', 'AND s.[1501] >= @pErdemjegy1Tol') + ' ' + IIF(@pErdemjegy1Ig IS NULL, N'', 'AND s.[1501] <= @pErdemjegy1Ig') + ' ) sub INNER JOIN T_TANTARGY_OSSZES tgy ON sub.TantargyId = tgy.ID AND tgy.TOROLT=''F'' INNER JOIN T_DICTIONARYITEMBASE_OSSZES dTantargy ON tgy.C_TARGYKATEGORIA = dTantargy.ID AND dTantargy.C_TANEVID = @pTanevId AND dTantargy.TOROLT=''F'' INNER JOIN ( SELECT nn.C_NAPDATUMA, tcs.C_OSZTALYCSOPORTID, COUNT(1) AS Letszam FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN T_NAPTARINAP_OSSZES nn ON nn.C_NAPDATUMA >= tcs.C_BELEPESDATUM AND (nn.C_NAPDATUMA < tcs.C_KILEPESDATUM OR tcs.C_KILEPESDATUM IS NULL) AND nn.TOROLT=''F'' WHERE nn.C_TANEVID = @pTanevId ' + IIF(@pOsztalyCsoportId IS NULL, N'', N'AND tcs.C_OSZTALYCSOPORTID = @pOsztalyCsoportId') + N' AND tcs.C_TANEVID = @pTanevId AND tcs.TOROLT=''F'' GROUP BY nn.C_NAPDATUMA, tcs.C_OSZTALYCSOPORTID ) letszam ON letszam.C_NAPDATUMA = sub.Datum AND letszam.C_OSZTALYCSOPORTID = OsztalyCsoportId' + ' ' + IIF(@pNemIrtDolgozatotTol IS NULL, N'', N'AND (letszam.Letszam - sub.Cnt) >= @pNemIrtDolgozatotTol') + ' ' + IIF(@pNemIrtDolgozatotIg IS NULL, N'', N'AND (letszam.Letszam - sub.Cnt) <= @pNemIrtDolgozatotIg') + ' ' + IIF(@pAtlagTol IS NULL, N'', N'AND ROUND(Total / CAST(Cnt AS Float), 2) >= @pAtlagTol') + ' ' + IIF(@pAtlagIg IS NULL, N'', N'AND ROUND(Total / CAST(Cnt AS Float), 2) <= @pAtlagIg') + ' ' SET @sql = CONCAT(@preSql, @mainSql) EXEC sp_executesql @sql, N' @pIntezmenyId int ,@pTanevId int ,@pOsztalyCsoportId int ,@pTantargyId int ,@pTanarId int ,@pErtekelesTema nvarchar(255) ,@pAtlagTol float ,@pAtlagIg float ,@pErdemjegy5Tol int ,@pErdemjegy5Ig int ,@pErdemjegy4Tol int ,@pErdemjegy4Ig int ,@pErdemjegy3Tol int ,@pErdemjegy3Ig int ,@pErdemjegy2Tol int ,@pErdemjegy2Ig int ,@pErdemjegy1Tol int ,@pErdemjegy1Ig int ,@pNemIrtDolgozatotTol int ,@pNemIrtDolgozatotIg int ,@pSzuperOsztalyfonok int ,@pDatum datetime' ,@pIntezmenyId = @pIntezmenyId ,@pTanevId = @pTanevId ,@pOsztalyCsoportId = @pOsztalyCsoportId ,@pTantargyId = @pTantargyId ,@pTanarId = @pTanarId ,@pErtekelesTema = @pErtekelesTema ,@pAtlagTol = @pAtlagTol ,@pAtlagIg = @pAtlagIg ,@pErdemjegy5Tol = @pErdemjegy5Tol ,@pErdemjegy5Ig = @pErdemjegy5Ig ,@pErdemjegy4Tol = @pErdemjegy4Tol ,@pErdemjegy4Ig = @pErdemjegy4Ig ,@pErdemjegy3Tol = @pErdemjegy3Tol ,@pErdemjegy3Ig = @pErdemjegy3Ig ,@pErdemjegy2Tol = @pErdemjegy2Tol ,@pErdemjegy2Ig = @pErdemjegy2Ig ,@pErdemjegy1Tol = @pErdemjegy1Tol ,@pErdemjegy1Ig = @pErdemjegy1Ig ,@pNemIrtDolgozatotTol = @pNemIrtDolgozatotTol ,@pNemIrtDolgozatotIg = @pNemIrtDolgozatotIg ,@pSzuperOsztalyfonok = @pSzuperOsztalyfonok ,@pDatum = @pDatum END GO