DROP PROCEDURE IF EXISTS sp_GetOrarendKereszttabla_Pedagogus GO CREATE PROCEDURE sp_GetOrarendKereszttabla_Pedagogus @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 o.TOROLT = 'F' AND o.C_ALTANEVID = @tanevId DECLARE @PedagogushozKapcsolodoOsszesOrarendiora TABLE (OsztalyId INT, OsztalyCsoportId INT, OrarendiOraId INT, TantargyId INT, PedagogusId INT, TeremId INT, HetirendId INT, HetnapjaId INT, Oraszam INT, OraErvenyessegKezdete DATE, OraErvenyessegVege DATE) INSERT INTO @PedagogushozKapcsolodoOsszesOrarendiora 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' CREATE TABLE #temp (PedagogusId INT, HetirendId INT, HetirendNev NVARCHAR(MAX), HetnapjaId INT, Oraszam INT, TantargyNev NVARCHAR(MAX), TeremNev NVARCHAR(MAX), OsztalyNev NVARCHAR(MAX)) INSERT INTO #temp SELECT OrarendiOra.PedagogusId PedagogusId ,OrarendiOra.HetirendId HetirendId ,hetirend.C_NAME HetirendNev ,OrarendiOra.HetnapjaId HetnapjaId ,OrarendiOra.Oraszam Oraszam ,ISNULL(Tantargy.C_NEVNYOMTATVANYBAN, Tantargy.C_NEV) TantargyNev ,Terem.C_NEV TeremNev ,ocs.C_NEV OsztalyNev FROM @PedagogushozKapcsolodoOsszesOrarendiora OrarendiOra INNER JOIN T_TANTARGY_OSSZES Tantargy ON Tantargy.Id = OrarendiOra.TantargyId 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 WHERE OrarendiOra.OraErvenyessegKezdete <= @Hetvege AND OrarendiOra.OraErvenyessegVege >= @Heteleje DECLARE @Hetirendek TABLE (Id INT) INSERT INTO @Hetirendek SELECT DISTINCT HetirendId FROM #temp DECLARE @OsszesOra TABLE (PedagogusId INT, Hetirend INT, Nap INT, Oraszam INT) INSERT INTO @OsszesOra SELECT DISTINCT PedagogusId, oo.Id, Nap.Nap , OraSzam.OraSzam FROM @Hetirendek oo CROSS JOIN (SELECT DISTINCT PedagogusId FROM #temp) Pedagogus(PedagogusId) CROSS JOIN (SELECT DISTINCT Oraszam FROM #temp) OraSzam (OraSzam) CROSS JOIN (VALUES (1408),(1409),(1410),(1411),(1412),(1413)) Nap (Nap) DECLARE @TenylegesOra TABLE (PedagogusId INT, Nap INT, OraSzam INT, Foglalkozas NVARCHAR(MAX)) INSERT INTO @TenylegesOra SELECT PedagogusId ,HetnapjaId ,Oraszam ,STUFF((SELECT DISTINCT ', ' + CAST(bveg.TantargyNev+' (' +bveg.OsztalyNev+', ' + 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.PedagogusId = veg.PedagogusId FOR XML PATH(''), TYPE) .value('.','NVARCHAR(MAX)'),1,2,' ') Foglalkozasok FROM #temp veg /*Végleges órarend*/ CREATE TABLE #Orarend (PedagogusId INT, PedagogusNev NVARCHAR(MAX), Ora INT, Nap INT, Foglalkozas NVARCHAR(MAX)) INSERT INTO #Orarend SELECT OsszesOra.PedagogusId ,ped.C_NYOMTATASINEV ,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.PedagogusId = OsszesOra.PedagogusId LEFT JOIN T_FELHASZNALO_OSSZES ped ON ped.ID = OsszesOra.PedagogusId 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 f.C_NYOMTATASINEV PedagogusNev, ' + @OraszamokAlias + ' FROM (SELECT DISTINCT PedagogusId FROM #temp) k INNER JOIN ( SELECT PedagogusId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1408 ) hetfo ON hetfo.PedagogusId = k.PedagogusId INNER JOIN ( SELECT PedagogusId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1409 ) kedd ON kedd.PedagogusId = k.PedagogusId INNER JOIN ( SELECT PedagogusId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1410 ) szerda ON szerda.PedagogusId = k.PedagogusId INNER JOIN ( SELECT PedagogusId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1411 ) csutortok ON csutortok.PedagogusId = k.PedagogusId INNER JOIN ( SELECT PedagogusId ,'+ @Oraszamok +' FROM #Orarend PIVOT (MAX(Foglalkozas) FOR Ora IN (' + @Oraszamok + '))a WHERE Nap = 1412 ) pentek ON pentek.PedagogusId = k.PedagogusId INNER JOIN T_FELHASZNALO_OSSZES f ON f.Id = k.PedagogusId ORDER BY C_NYOMTATASINEV ' EXEC sp_executesql @sql DROP TABLE #Napok DROP TABLE #Orarend DROP TABLE #KapcsolodoCsoportok END GO