IF OBJECT_ID('dbo.uspGetOsztalycsoportTantargyiMulasztasai') IS NOT NULL BEGIN DROP PROCEDURE dbo.uspGetOsztalycsoportTantargyiMulasztasai END GO CREATE PROCEDURE dbo.uspGetOsztalycsoportTantargyiMulasztasai @pOsztalyId int ,@pTantargyId int ,@pTanevid int ,@pIntezmenyId int ,@pCsakMegtartott bit /*0 - nem, 1 - igen */ AS BEGIN SET NOCOUNT ON; DECLARE @isResultTableDeclered bit = 0 ,@oraPerc int ,@sql nvarchar(max) SET @oraPerc = ( SELECT ISNULL(csp.C_ORAPERC, 45) FROM T_OSZTALYCSOPORT ocs LEFT JOIN T_CSOPORT cs on cs.ID = ocs.ID AND cs.TOROLT = 'F' LEFT JOIN T_CSOPORTTIPUS csp ON csp.ID = cs.C_TIPUSA AND cs.TOROLT = 'F' WHERE ocs.ID = @pOsztalyId AND ocs.TOROLT = 'F') IF OBJECT_ID('tempdb..#OsztalyTanuloi') IS NOT NULL BEGIN DROP TABLE #OsztalyTanuloi END CREATE TABLE #OsztalyTanuloi ( TanuloId int ,Belepes datetime ,Kilepes datetime ,PRIMARY KEY CLUSTERED (TanuloId) ) INSERT INTO #OsztalyTanuloi (TanuloId) SELECT DISTINCT C_TANULOID FROM T_TANULOCSOPORT_OSSZES WHERE C_OSZTALYCSOPORTID = @pOsztalyId AND C_TANEVID = @pTanevId AND TOROLT = 'F' IF OBJECT_ID('tempdb..#Result') IS NULL BEGIN SET @isResultTableDeclered = 1; CREATE TABLE #Result ( TanuloId int ,TantargyId int ,Mulasztas int ,MegtartottOra int ,HatralevoOra int ,PRIMARY KEY CLUSTERED (TanuloId, TantargyId) ) END SET @sql = N' INSERT INTO #Result ( TanuloId ,TantargyId ,Mulasztas ,MegtartottOra ,HatralevoOra ) SELECT ot.TanuloId ,tn.C_TANTARGYID AS TantargyId ,SUM(IIF(C_TIPUS = 1500, 1, 0)) + (SUM(IIF(C_TIPUS = 1499, C_KESESPERCBEN, 0)) / @pOraPerc) AS Mulasztas ,COUNT(DISTINCT tn.ID) AS MegtartottOra ,IIF(@pCsakMegtartott = 1, NULL, 0) AS HatralevoOra FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN #OsztalyTanuloi ot ON tcs.C_TANULOID = ot.TanuloId INNER JOIN T_TANITASIORA_OSSZES tn ON tn.C_OSZTALYCSOPORTID = tcs.C_OSZTALYCSOPORTID AND tn.C_BEJEGYZESIDEJE >= tcs.C_BELEPESDATUM AND tn.C_BEJEGYZESIDEJE < ISNULL(tcs.C_KILEPESDATUM, ''21000101'') AND tn.C_MEGTARTOTT = ''T'' AND tn.TOROLT = ''F'' LEFT JOIN T_TANULOMULASZTAS_OSSZES tm ON tm.C_TANITASIORAKID = tn.ID AND tm.C_ORATANULOIID = ot.TanuloId AND tm.C_TIPUS BETWEEN 1499 AND 1500 AND tm.TOROLT = ''F'' WHERE tcs.TOROLT = ''F'' ' + IIF(@pTantargyId IS NULL, '', 'AND tn.C_TANTARGYID = @pTantargyId') + ' GROUP BY ot.TanuloId, tn.C_TANTARGYID ' EXEC sys.sp_executesql @sql, N'@pTantargyId int ,@pOraPerc int ,@pCsakMegtartott bit' ,@pTantargyId = @pTantargyId ,@pOraPerc = @oraPerc ,@pCsakMegtartott = @pCsakMegtartott IF @pCsakMegtartott = 0 BEGIN CREATE TABLE #OrarendTable ( Id int ,ORARENDIID INT ,Datum datetime ,Bontott char(1) ,Hetirend int ,HetNapja int ,HetSorszam int ,ErvenyessegKezdete datetime ,ErvenyessegVege datetime ,OraKezdete datetime ,OraVege datetime ,Oraszam int ,TargyNev nvarchar(300) ,TargyNevForMobile nvarchar(300) ,TargykategoriaID int ,Megtartott char(1) ,CsengetesiRendOraID int ,CsengetesiRendID int ,MaxNapiOraszam int ,OsztalyNev nvarchar(255) ,TanevRendOsztalyCsoportId int ,MegjelenesOka nvarchar(300) ,TanarNev nvarchar(255) ,TeremNev nvarchar(255) ,OraTipus nvarchar(200) ,Hianyzas char(1) ,Keses char(1) ,Ures char(1) ,HelyettesitoTanarID int ,HelyettesitoTanarNev nvarchar(255) ,TanarID int ,AdminAltalKiirt char(1) ,GroupId int ,Tema nvarchar(max) ,TantargyId int ,OsztCsopId int ,INDEX IX_TanevRendOsztalyCsoportId CLUSTERED (TanevRendOsztalyCsoportId) ) DECLARE @idoszakKezdete datetime = GETDATE() DECLARE @idoszakVege datetime SELECT @idoszakVege = C_NAPDATUMA FROM T_NAPTARINAP WHERE C_NAPTIPUSA = 1395 AND C_TANEVID = @pTanevId INSERT INTO #OrarendTable ( Id,ORARENDIID,Datum,Bontott,Hetirend,HetNapja,HetSorszam,ErvenyessegKezdete,ErvenyessegVege,OraKezdete,OraVege,Oraszam, TargyNev,TargyNevForMobile,TargykategoriaID,Megtartott,CsengetesiRendOraID,CsengetesiRendID,MaxNapiOraszam,OsztalyNev,TanevRendOsztalyCsoportId, MegjelenesOka,TanarNev,TeremNev,OraTipus,Hianyzas,Keses,Ures,HelyettesitoTanarID,HelyettesitoTanarNev,TanarID,AdminAltalKiirt,GroupId,Tema,TantargyId,OsztCsopId) EXEC sp_GetOrarend @pIntezmenyId = @pIntezmenyId ,@pTanevId = @pTanevId ,@pIdoszakKezdete = @idoszakKezdete ,@pIdoszakVege = @idoszakVege ,@pTanarId = NULL ,@pIsHelyettesitesNelkul = 0 ,@pOsztalyCsoportId = @pOsztalyId ,@pTanuloId = NULL ,@pTantargyId = @pTantargyId ,@pTeremId = NULL ,@pCsakOrarendiOrak = 0 ,@pIsNapirend = 0 UPDATE r SET r.HatralevoOra = ISNULL(o.HatralevoOra, 0) FROM #Result r LEFT JOIN ( SELECT ot.TanuloId, COUNT(1) AS HatralevoOra FROM T_TANULOCSOPORT tcs INNER JOIN #OrarendTable oo ON tcs.C_OSZTALYCSOPORTID = oo.TanevRendOsztalyCsoportId INNER JOIN #OsztalyTanuloi ot ON tcs.C_TANULOID = ot.TanuloId AND oo.Datum >= tcs.C_BELEPESDATUM AND oo.Datum < ISNULL(tcs.C_KILEPESDATUM, '21000101') GROUP BY ot.TanuloId ) o ON o.TanuloId = r.TanuloId END IF @isResultTableDeclered = 1 BEGIN SELECT TanuloId ,TantargyId ,Mulasztas ,MegtartottOra ,HatralevoOra FROM #Result END END GO