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 @createTmpTable bit = 0; IF OBJECT_ID('tempdb..#OsztalyTanuloi') IS NOT NULL BEGIN DROP TABLE #OsztalyTanuloi END CREATE TABLE #OsztalyTanuloi ( TanuloId int PRIMARY KEY ,Belepes datetime ,Kilepes datetime --,CONSTRAINT PK_OsztalyTanuloi PRIMARY KEY (TanuloId) ) INSERT INTO #OsztalyTanuloi (TanuloId/*, Belepes, Kilepes*/) SELECT DISTINCT C_TANULOID--, C_BELEPESDATUM, ISNULL(C_KILEPESDATUM, '21000101') FROM T_TANULOCSOPORT_OSSZES WHERE C_OSZTALYCSOPORTID = @pOsztalyId AND C_TANEVID = @pTanevId AND TOROLT = 'F' IF OBJECT_ID('tempdb..#Result') IS NULL BEGIN SET @createTmpTable = 1; CREATE TABLE #Result ( TanuloId int PRIMARY KEY ,Mulasztas int ,MegtartottOra int ,HatralevoOra int --,CONSTRAINT PK_Result PRIMARY KEY (TanuloId) ) END INSERT INTO #Result ( TanuloId ,Mulasztas ,MegtartottOra ,HatralevoOra ) SELECT ot.TanuloId ,SUM(IIF(C_TIPUS = 1500, 1, 0)) + (SUM(IIF(C_TIPUS = 1499, C_KESESPERCBEN, 0)) / 45) AS Mulasztas ,COUNT(DISTINCT tn.ID) AS MegtartottOra ,NULL 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') 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 WHERE tn.C_TANTARGYID = @pTantargyId GROUP BY ot.TanuloId IF @pCsakMegtartott = 1 BEGIN IF(@createTmpTable = 1) BEGIN SELECT TanuloId ,Mulasztas ,MegtartottOra ,HatralevoOra FROM #Result END END ELSE 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 ,HelyettesitesId 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 ,@pOsztalyCsoportId = @pOsztalyId ,@pTanuloId = 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') WHERE oo.TantargyId = @pTantargyId GROUP BY ot.TanuloId ) o ON o.TanuloId = r.TanuloId IF(@createTmpTable = 1) BEGIN SELECT TanuloId ,Mulasztas ,MegtartottOra ,HatralevoOra FROM #Result END END IF OBJECT_ID('tempdb..#OsztalyTanuloi') IS NOT NULL BEGIN DROP TABLE #OsztalyTanuloi END IF OBJECT_ID('tempdb..#OrarendTable') IS NOT NULL BEGIN DROP TABLE #OrarendTable END END GO