DROP PROCEDURE IF EXISTS sp_GetOrarendKereszttabla_Osztaly GO CREATE PROCEDURE sp_GetOrarendKereszttabla_Osztaly @tanevId INT, @aktivTanevId INT AS BEGIN SET NOCOUNT ON; DECLARE @UtolsoNap DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA=1395 AND C_TANEVID=@tanevid AND TOROLT='F') ,@HetEleje DATE ,@HetVege DATE IF (@tanevId = @AktivtanevId AND GETDATE() <= @UtolsoNap) BEGIN SET @HetEleje = (SELECT TOP 1 nh.C_HETKEZDONAPJA FROM T_NAPTARIHET_OSSZES nh WHERE CONVERT(DATE, GETDATE())>=CONVERT(DATE, NH.C_HETKEZDONAPJA) AND CONVERT(DATE, GETDATE())<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) and nh.TOROLT='F' and nh.C_TANEVID=@tanevid) SET @HetVege = (SELECT TOP 1 nh.C_HETUTOLSONAPJA FROM T_NAPTARIHET_OSSZES nh WHERE CONVERT(DATE, GETDATE())>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND CONVERT(DATE, GETDATE())<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) and nh.TOROLT='F' and nh.C_TANEVID=@tanevid) END ELSE BEGIN SET @HetEleje = (SELECT TOP 1 nh.C_HETKEZDONAPJA FROM T_NAPTARIHET_OSSZES nh WHERE @UtolsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @UtolsoNap<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) AND nh.TOROLT='F' AND nh.C_TANEVID=@tanevId) SET @HetVege = (SELECT TOP 1 nh.C_HETUTOLSONAPJA FROM T_NAPTARIHET_OSSZES nh WHERE @UtolsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @UtolsoNap<=CONVERT(DATE, nh.C_HETUTOLSONAPJA) AND nh.TOROLT='F' AND nh.C_TANEVID=@tanevId) END CREATE TABLE #KapcsolodoCsoportok (OsztalyId INT, OsztalyCsoportId INT) INSERT INTO #KapcsolodoCsoportok SELECT DISTINCT o.ID Osztaly ,k.ID KapcsolodoCsoport FROM T_OSZTALY_OSSZES o CROSS APPLY fnGetKapcsolodoOsztalycsoportokByDate(ID, @HetEleje, @HetVege) k WHERE TOROLT = 'F' AND C_ALTANEVID = @tanevId DECLARE @OsztalyhozKapcsolodoOsszesOrarendiora TABLE (OsztalyId INT, OsztalyCsoportId INT, OrarendiOraId INT, TantargyId INT, TanarId INT, TeremId INT, HetirendId INT, HetnapjaId INT, Oraszam INT, OraErvenyessegKezdete DATE, OraErvenyessegVege DATE) INSERT INTO @OsztalyhozKapcsolodoOsszesOrarendiora SELECT k.OsztalyId ,k.OsztalyCsoportId ,o.ID ,C_TANTARGYID ,C_TANARID ,C_TEREMID ,C_HETIREND ,C_HETNAPJA ,C_ORASZAM ,C_ORAERVENYESSEGKEZDETE ,C_ORAERVENYESSEGVEGE FROM #KapcsolodoCsoportok k LEFT JOIN T_ORARENDIORA_OSSZES o ON o.C_OSZTALYCSOPORTID = k.OsztalyCsoportId WHERE TOROLT = 'F' DECLARE @temp TABLE (OsztalyId INT, OsztalyCsoportNev NVARCHAR(MAX), OsztalyNev NVARCHAR(MAX), HetirendId INT, HetirendNev NVARCHAR(MAX), HetnapjaId INT, Oraszam INT, TantargyNev NVARCHAR(MAX), PedagogusNev NVARCHAR(MAX), TeremNev NVARCHAR(MAX)) INSERT INTO @temp SELECT OrarendiOra.OsztalyId OsztalyId ,ocs.C_NEV OsztalyCsoportNev ,osztalyNev.C_NEV OsztalyNev ,OrarendiOra.HetirendId HetirendId ,hetirend.C_NAME HetirendNev ,OrarendiOra.HetnapjaId HetnapjaId ,OrarendiOra.Oraszam Oraszam ,ISNULL(Tantargy.C_NEVNYOMTATVANYBAN, Tantargy.C_NEV) TantargyNev ,Pedagogus.C_NYOMTATASINEV PedagogusNev ,Terem.C_NEV TeremNev FROM @OsztalyhozKapcsolodoOsszesOrarendiora OrarendiOra INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.Id = OrarendiOra.TantargyId INNER JOIN T_FELHASZNALO_OSSZES Pedagogus ON Pedagogus.Id = OrarendiOra.TanarId INNER JOIN T_TEREM_OSSZES Terem ON Terem.Id = OrarendiOra.TeremId INNER JOIN T_DICTIONARYITEMBASE_OSSZES hetirend ON hetirend.Id = OrarendiOra.HetirendId AND hetirend.C_TANEVID = @tanevId INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = OrarendiOra.OsztalyCsoportId INNER JOIN T_OSZTALYCSOPORT_OSSZES osztalyNev ON osztalyNev.ID = OrarendiOra.OsztalyId WHERE OrarendiOra.OraErvenyessegKezdete <= @Hetvege AND OrarendiOra.OraErvenyessegVege >= @Heteleje DECLARE @Hetirendek TABLE (Id INT) INSERT INTO @Hetirendek SELECT DISTINCT HetirendId FROM @temp DECLARE @OsszesOra TABLE (OsztalyId INT, Hetirend INT, Nap INT, Oraszam INT) INSERT INTO @OsszesOra SELECT DISTINCT Osztaly, oo.Id, Nap.Nap , OraSzam.OraSzam FROM @Hetirendek oo CROSS JOIN (SELECT DISTINCT OsztalyId FROM #KapcsolodoCsoportok) Osztaly(Osztaly) CROSS JOIN (SELECT DISTINCT Oraszam FROM @temp) OraSzam (OraSzam) CROSS JOIN (VALUES (1408),(1409),(1410),(1411),(1412),(1413)) Nap (Nap) DECLARE @TenylegesOra TABLE (OsztalyId INT, Nap INT, OraSzam INT, Foglalkozas NVARCHAR(MAX)) INSERT INTO @TenylegesOra SELECT OsztalyId ,HetnapjaId ,Oraszam ,STUFF((SELECT DISTINCT ', ' + CAST(bveg.TantargyNev+' ('+IIF(bveg.OsztalyCsoportNev <> bveg.OsztalyNev, bveg.OsztalyCsoportNev +', ', '') +bveg.PedagogusNev+', '+bveg.TeremNev+', ' +HetirendNev+')' AS VARCHAR(max)) FROM @temp bveg WHERE bveg.HetnapjaId=veg.HetnapjaId AND bveg.Oraszam=veg.Oraszam AND (bveg.HetirendId=HetirendId OR bveg.HetirendId=1554) AND bveg.OsztalyId = veg.OsztalyId FOR XML PATH(''), TYPE) .value('.','NVARCHAR(MAX)'),1,2,' ') Foglalkozasok FROM @temp veg /*Végleges órarend*/ CREATE TABLE #Orarend (OsztalyId INT, OsztalyNev NVARCHAR(MAX), Ora INT, Nap INT, Foglalkozas NVARCHAR(MAX)) INSERT INTO #Orarend SELECT OsszesOra.OsztalyId ,ocs.C_NEV ,OsszesOra.Oraszam ,OsszesOra.Nap ,TenylegesOra.Foglalkozas FROM @OsszesOra OsszesOra LEFT JOIN @TenylegesOra TenylegesOra ON OsszesOra.Nap=TenylegesOra.Nap AND OsszesOra.Oraszam=TenylegesOra.Oraszam AND TenylegesOra.OsztalyId = OsszesOra.OsztalyId LEFT JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = OsszesOra.OsztalyId ORDER BY OsszesOra.Hetirend, OsszesOra.Nap, OsszesOra.Oraszam -------------------------------------------------------------------------------------------------------------- CREATE TABLE #Napok (Nev NVARCHAR(MAX), Oraszam INT, Rendez INT) INSERT INTO #Napok SELECT DISTINCT * , CASE WHEN nap = 'hetfo' THEN 1 WHEN nap = 'kedd' THEN 2 WHEN nap = 'szerda' THEN 3 WHEN nap = 'csutortok' THEN 4 WHEN nap = 'pentek' THEN 5 END FROM (VALUES ('hetfo'), ('kedd'), ('szerda'), ('csutortok'), ('pentek')) AS napok(nap) CROSS JOIN (SELECT DISTINCT Oraszam FROM @temp) OraSzam (OraSzam) DECLARE @Oraszamok NVARCHAR(MAX), @OraszamokAlias NVARCHAR(MAX) SELECT @Oraszamok = ISNULL(@Oraszamok + ', ', '') + '[' + CAST(Oraszam AS NVARCHAR(MAX)) + ']' FROM (SELECT DISTINCT Oraszam FROM @temp ) o SELECT @OraszamokAlias = ISNULL(@OraszamokAlias + ', ', '') + Nev +'.' + '[' + CAST(Oraszam AS NVARCHAR(MAX)) + ']' FROM #Napok ORDER BY Rendez, Oraszam DECLARE @sql NVARCHAR(MAX) SET @sql = ' SELECT DISTINCT ocs.C_NEV OsztalyNev, ' + @OraszamokAlias + ' FROM #KapcsolodoCsoportok k INNER JOIN ( SELECT OsztalyId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1408 ) hetfo ON hetfo.OsztalyId = k.OsztalyId INNER JOIN ( SELECT OsztalyId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1409 ) kedd ON kedd.OsztalyId = k.OsztalyId INNER JOIN ( SELECT OsztalyId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1410 ) szerda ON szerda.OsztalyId = k.OsztalyId INNER JOIN ( SELECT OsztalyId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1411 ) csutortok ON csutortok.OsztalyId = k.OsztalyId INNER JOIN ( SELECT OsztalyId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1412 ) pentek ON pentek.OsztalyId = k.OsztalyId INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.Id = k.OsztalyId ORDER BY C_NEV ' EXEC sp_executesql @sql DROP TABLE #Napok DROP TABLE #Orarend DROP TABLE #KapcsolodoCsoportok END GO