IF OBJECT_ID('sp_GetTeremrend') IS NOT NULL BEGIN DROP PROCEDURE sp_GetTeremrend END GO CREATE PROCEDURE [sp_GetTeremrend] @TanevId int, @IntezmenyId 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 @AKTUALISHETELEJE DATE=(SELECT TOP 1 C_HETKEZDONAPJA FROM T_NAPTARIHET WHERE C_INTEZMENYID=@IntezmenyId AND C_TANEVID=@TANEVID AND TOROLT='F' AND C_HETKEZDONAPJA<=CONVERT(DATE,GETDATE()) AND C_HETUTOLSONAPJA>=CONVERT(DATE,GETDATE()) ) DECLARE @AKTUALISHETVEGE DATE=( SELECT TOP 1 C_HETUTOLSONAPJA FROM T_NAPTARIHET WHERE C_INTEZMENYID=@IntezmenyId AND C_TANEVID=@TanevId AND TOROLT='F' AND C_HETKEZDONAPJA<=CONVERT(DATE,GETDATE()) AND C_HETUTOLSONAPJA>=CONVERT(DATE,GETDATE()) ) -- @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<=@AktualisHetEleje) and (OrarendiOraFoglalkozas.c_oraervenyessegvege>=@AktualisHetVege)or (OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE>=@AktualisHetEleje) and (OrarendiOraFoglalkozas.C_ORAERVENYESSEGKEZDETE<=@AktualisHetVege)) 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