IF OBJECT_ID('sp_GetTeremrend') IS NOT NULL BEGIN DROP PROCEDURE sp_GetTeremrend END GO CREATE PROCEDURE [sp_GetTeremrend] @TanevId INT, @IntezmenyId INT, @aktivTanevId INT AS BEGIN SET NOCOUNT ON; DECLARE @OrarendiOra TABLE (Hetirend int, OraSzam int, Hetnapja int, Terem nvarchar(max), Foglalkozas nvarchar(max)) --Összes órarendi óra DECLARE @Hetirendek TABLE (Hetirend int) --Összes hetirend DECLARE @Ures TABLE (Hetirend int, OraSzam int, Hetnapja int, Terem nvarchar(max)) --Összes hetirendhez órasávok generálva DECLARE @Teljes TABLE (Hetirend int, OraSzam int, Hetnapja int, Terem nvarchar(max), Foglalkozas nvarchar(max)) --@Ures tábla, a létező órákkal kiegészítve DECLARE @UtolsoNap DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA=1395 AND C_TANEVID=@tanevid AND TOROLT='F') DECLARE @ElsoNap DATE = (SELECT TOP 1 C_DATUM FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA=1394 AND C_TANEVID=@tanevid AND TOROLT='F') ,@HetEleje DATE ,@HetVege DATE IF (@tanevId = @AktivtanevId AND GETDATE() <= @UtolsoNap) BEGIN IF (GETDATE() <= @ElsoNap) BEGIN SET @HetEleje =(SELECT TOP 1 nh.C_HETKEZDONAPJA FROM T_NAPTARIHET_OSSZES nh WHERE @ElsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @ElsoNap<=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 @ElsoNap>=CONVERT(DATE, nh.C_HETKEZDONAPJA) AND @ElsoNap<=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 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 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 -- @Hetirendek tábálába inzertálás INSERT INTO @Hetirendek SELECT DISTINCT C_HETIREND FROM T_ORARENDIORA_OSSZES WHERE TOROLT='F' AND C_TANEVID=@TANEVID AND C_INTEZMENYID=@IntezmenyId -- @OrarendiOra tábálába inzertálás INSERT INTO @OrarendiOra SELECT C_HETIREND, OrarendiOra.C_ORASZAM, C_HETNAPJA, Terem.C_NEV, --Összefűzi a foglalkozásokat, ha teremre egyszerre több foglalkozás van felvéve egy órára STUFF( (SELECT DISTINCT ', ' + ISNULL(CAST(Foglalkozas.C_NEV AS VARCHAR(MAX)),'') FROM T_ORARENDIORA_OSSZES OrarendiOraFoglalkozas INNER JOIN T_FOGLALKOZAS_OSSZES Foglalkozas ON Foglalkozas.ID = OrarendiOraFoglalkozas.C_FOGLALKOZASID where OrarendiOraFoglalkozas.C_TEREMID = OrarendiOra.C_TEREMID AND (OrarendiOraFoglalkozas.C_HETIREND = OrarendiOra.C_HETIREND OR OrarendiOraFoglalkozas.C_HETIREND = 1554) AND OrarendiOraFoglalkozas.C_HETNAPJA = OrarendiOra.C_HETNAPJA AND OrarendiOraFoglalkozas.C_ORASZAM = OrarendiOra.c_oraszam AND ((OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE<=@HetEleje) and (OrarendiOraFoglalkozas.c_oraervenyessegvege>=@HetVege)or (OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE>=@HetEleje) and (OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE<=@HetVege)) AND Foglalkozas.TOROLT = 'F' AND Foglalkozas.C_INTEZMENYID = @IntezmenyId AND Foglalkozas.C_TANEVID = @TanevId AND OrarendiOraFoglalkozas.Torolt ='F' AND OrarendiOraFoglalkozas.C_TANEVID =@TanevId FOR XML PATH('')),1,1,'' ) AS Foglalkozas FROM T_ORARENDIORA_OSSZES OrarendiOra INNER JOIN T_TEREM_OSSZES Terem ON Terem.ID = OrarendiOra.C_TEREMID WHERE OrarendiOra.C_INTEZMENYID = @IntezmenyId AND OrarendiOra.C_TANEVID = @TanevId AND OrarendiOra.TOROLT = 'F' AND OrarendiOra.C_TEREMID IS NOT NULL -- @Ures tábálába inzertálás INSERT INTO @Ures SELECT HetiRend, OraSzam, Hetnapja, Terem FROM @Hetirendek CROSS JOIN (SELECT DISTINCT OraSzam FROM @OrarendiOra) OraSzam (OraSzam) CROSS JOIN (SELECT DISTINCT Terem FROM @OrarendiOra) Terem (Terem) CROSS JOIN (SELECT DISTINCT Hetnapja FROM @OrarendiOra) Hetnapja (Hetnapja) -- @Teljes tábálába inzertálás INSERT INTO @Teljes SELECT Ures.*, OrarendiOra.Foglalkozas FROM @Ures Ures LEFT JOIN @OrarendiOra OrarendiOra ON OrarendiOra.Hetirend = Ures.Hetirend AND OrarendiOra.Hetnapja = Ures.Hetnapja AND OrarendiOra.OraSzam = Ures.OraSzam AND OrarendiOra.Terem = Ures.Terem -- Az Excel nyomtatvány munkalap- és táblázat nevei SELECT Hetnapja FROM (SELECT DISTINCT C_NAME Hetnapja, C_VALUE Sorrend FROM @OrarendiOra INNER JOIN T_DICTIONARYITEMBASE_OSSZES DictionaryItemBase on DictionaryItemBase.ID = Hetnapja ) Hetnapja ORDER BY Sorrend SELECT Hetirend FROM (SELECT DISTINCT C_NAME Hetirend, C_VALUE Sorrend FROM @Hetirendek INNER JOIN T_DICTIONARYITEMBASE_OSSZES DictionaryItemBase on DictionaryItemBase.ID = Hetirend --WHERE DictionaryItemBase.ID <> 1554--Minden hét ) Hetirend ORDER BY Hetirend -- @Teljes tábla feltöltése, fő lekérdezés DECLARE KurzorHetirend CURSOR FOR SELECT Hetirend FROM @Hetirendek --WHERE Hetirend <> 1554 ORDER BY Hetirend DECLARE @Hetirend INT DECLARE KurzorHetnapja CURSOR FOR SELECT DISTINCT Hetnapja FROM @Ures ORDER BY Hetnapja DECLARE @Hetnapja INT OPEN KurzorHetirend FETCH NEXT FROM KurzorHetirend INTO @Hetirend WHILE @@FETCH_STATUS = 0 BEGIN OPEN KurzorHetnapja FETCH NEXT FROM KurzorHetnapja INTO @Hetnapja -- A "Minden hét" óráinak inzertálása minden hetirendbe INSERT INTO @Teljes SELECT @Hetirend, OraSzam, Hetnapja, Terem, Foglalkozas FROM @OrarendiOra WHERE Hetirend = 1554 WHILE @@FETCH_STATUS = 0 BEGIN CREATE table #VeglegesteremOrarend(Terem nvarchar(max), [0] nvarchar(max), [1] nvarchar(max), [2] nvarchar(max), [3] nvarchar(max), [4] nvarchar(max), [5] nvarchar(max), [6] nvarchar(max), [7] nvarchar(max), [8] nvarchar(max), [9] nvarchar(max), [10] nvarchar(max)) INSERT INTO #VeglegesTeremOrarend SELECT Vegleges.Terem, Vegleges.[0], Vegleges.[1], Vegleges.[2], Vegleges.[3], Vegleges.[4], Vegleges.[5], Vegleges.[6], Vegleges.[7], Vegleges.[8], Vegleges.[9], Vegleges.[10] FROM @Teljes PIVOT ( MAX(Foglalkozas) FOR OraSzam IN ([0],[1],[2],[3],[4],[5],[6],[7],[8],[9],[10]) ) Vegleges WHERE Vegleges.Hetirend = @Hetirend AND Vegleges.Hetnapja = @Hetnapja SELECT * FROM #VeglegesTeremOrarend DROP TABLE #VeglegesTeremOrarend FETCH NEXT FROM KurzorHetnapja INTO @Hetnapja END FETCH NEXT FROM KurzorHetirend INTO @Hetirend CLOSE KurzorHetnapja END CLOSE KurzorHetirend DEALLOCATE KurzorHetnapja DEALLOCATE KurzorHetirend END GO