-- ============================================= -- Author: Zsiga Attila -- Create date: 2016.04.22. -- Description: Tanévrendi események szerinti csengetési rendek -- ============================================= DROP PROCEDURE IF EXISTS [dbo].[sp_GetTanevRendjeCsengetesiRend] GO CREATE PROCEDURE [dbo].[sp_GetTanevRendjeCsengetesiRend] @pKezdoDatum DATETIME, @pVegDatum DATETIME, @pOsztalyCsoportID INT AS BEGIN SET NOCOUNT ON; SELECT Datum, CsengetesiRendID, LastChangedMax INTO #tmpMindenOsztalyraVonatkozo FROM ( SELECT TANEVRENDJE.C_DATUM Datum, MAX(LASTCHANGED) LastChangedMax FROM (SELECT * FROM T_TANEVRENDJE WHERE T_TANEVRENDJE.TOROLT = 'F' AND T_TANEVRENDJE.C_DATUM BETWEEN @pKezdoDatum AND @pVegDatum AND T_TANEVRENDJE.C_OSSZESCSOPORTRAVONATKOZIK = 'T') TANEVRENDJE GROUP BY TANEVRENDJE.C_DATUM ) MindenOsztalyra LEFT JOIN (SELECT C_CSENGETESIRENDID CsengetesiRendID, C_DATUM, LASTCHANGED FROM T_TANEVRENDJE WHERE T_TANEVRENDJE.TOROLT = 'F' AND T_TANEVRENDJE.C_DATUM BETWEEN @pKezdoDatum AND @pVegDatum AND T_TANEVRENDJE.C_OSSZESCSOPORTRAVONATKOZIK = 'T') TANEVRENDJE ON TANEVRENDJE.C_DATUM = MindenOsztalyra.Datum AND TANEVRENDJE.LASTCHANGED = MindenOsztalyra.LastChangedMax CREATE TABLE #tmpAdottOsztalyraVonatkozo ( Datum DATETIME, CsengetesiRendID INT, LastChangedMax DATETIME ) IF @pOsztalyCsoportID IS NULL BEGIN INSERT INTO #tmpAdottOsztalyraVonatkozo SELECT NULL Datum, NULL CsengetesiRendID, NULL LastChangedMax FROM (SELECT NULL Datum, NULL CsengetesiRendID FROM T_TANEVRENDJE WHERE 1=2) AdottOsztalyra END ELSE BEGIN INSERT INTO #tmpAdottOsztalyraVonatkozo SELECT Datum, CsengetesiRendID, LastChangedMax FROM ( SELECT TANEVRENDJE.C_DATUM Datum, MAX(LASTCHANGED) LastChangedMax FROM (SELECT * FROM T_TANEVRENDJE WHERE T_TANEVRENDJE.TOROLT = 'F' AND T_TANEVRENDJE.C_DATUM BETWEEN @pKezdoDatum AND @pVegDatum AND T_TANEVRENDJE.C_OSSZESCSOPORTRAVONATKOZIK = 'F') TANEVRENDJE INNER JOIN (SELECT * FROM T_OSZTALYCSOPORT_TANEVRENDJE WHERE C_OSZTALYCSOPORTID = @pOsztalyCsoportID) OSZTALYCSOPORT_TANEVRENDJE ON OSZTALYCSOPORT_TANEVRENDJE.C_TANEVRENDJEID = TANEVRENDJE.ID GROUP BY TANEVRENDJE.C_DATUM ) AdottOsztalyra LEFT JOIN (SELECT C_CSENGETESIRENDID CsengetesiRendID, C_DATUM, LASTCHANGED FROM T_TANEVRENDJE WHERE T_TANEVRENDJE.TOROLT = 'F' AND T_TANEVRENDJE.C_DATUM BETWEEN @pKezdoDatum AND @pVegDatum AND T_TANEVRENDJE.C_OSSZESCSOPORTRAVONATKOZIK = 'F') TANEVRENDJE ON TANEVRENDJE.C_DATUM = AdottOsztalyra.Datum AND TANEVRENDJE.LASTCHANGED = AdottOsztalyra.LastChangedMax END SELECT CASE WHEN AdottOsztalyraVonatkozo.CsengetesiRendID IS NOT NULL THEN AdottOsztalyraVonatkozo.Datum ELSE MindenOsztalyraVonatkozo.Datum END Datum, CASE WHEN AdottOsztalyraVonatkozo.CsengetesiRendID IS NOT NULL THEN AdottOsztalyraVonatkozo.CsengetesiRendID ELSE MindenOsztalyraVonatkozo.CsengetesiRendID END CsengetesiRendID FROM #tmpMindenOsztalyraVonatkozo AS MindenOsztalyraVonatkozo FULL OUTER JOIN #tmpAdottOsztalyraVonatkozo AS AdottOsztalyraVonatkozo ON AdottOsztalyraVonatkozo.Datum = MindenOsztalyraVonatkozo.Datum DROP TABLE #tmpMindenOsztalyraVonatkozo DROP TABLE #tmpAdottOsztalyraVonatkozo END GO