kreta/Kreta.DataAccess.Migrations/DBScripts/Database/dbo/Functions/fnGetKapcsolodoOsztalycsoportokByDate.sql
2024-03-13 00:33:46 +01:00

64 lines
2.2 KiB
Transact-SQL

/*
Minden olyan esetben amikor egy osztályhoz tartozó csoportokat kell meghatározni,
akkor az alábbi módon kell ezeket megadni:
a. Egy osztályhoz tartozik minden olyan csoport, amelynek tagja az osztály bármelyik tanulója.
Tehát ha egy osztályból akár egyetlen tanuló is tagja egy csoportnak, akkor az az osztályhoz is kapcsolódik.
b. Továbbá egy osztályhoz mindig kapcsolódnak az osztálybontásosnak jelölt csoportjaik is,
függetlenül attól, hogy abban van-e tanuló!
*/
DROP FUNCTION IF EXISTS fnGetKapcsolodoOsztalycsoportokByDate
GO
CREATE FUNCTION fnGetKapcsolodoOsztalycsoportokByDate (
@osztalyCsoportId int
,@start datetime
,@end datetime
)
RETURNS @ocs TABLE (ID int)
AS BEGIN
DECLARE @kategoriaId int = (SELECT C_FELADATKATEGORIAID FROM T_OSZTALYCSOPORT_OSSZES WHERE ID = @osztalyCsoportId)
INSERT INTO @ocs
SELECT @osztalyCsoportId AS ID /* Önmaga */
UNION
SELECT ID /* Osztály esetén, a bontott csoportok */
FROM T_CSOPORT_OSSZES
WHERE C_OSZTALYBONTASID = @osztalyCsoportId AND TOROLT = 'F'
UNION
SELECT C_OSZTALYBONTASID AS ID /* Csoport esetén, a ha bontott, akkor az osztálya */
FROM T_CSOPORT_OSSZES
WHERE ID = @osztalyCsoportId
AND C_OSZTALYBONTASID IS NOT NULL AND TOROLT = 'F'
UNION
SELECT ID /* Csoport esetén, a ha bontott, akkor az osztályának a többi csoportbontása */
FROM T_CSOPORT_OSSZES
WHERE C_OSZTALYBONTASID IN (
SELECT C_OSZTALYBONTASID FROM T_CSOPORT_OSSZES
WHERE ID = @osztalyCsoportId AND TOROLT = 'F'
) AND TOROLT ='F'
UNION
SELECT tcs2.C_OSZTALYCSOPORTID /* Azok az osztálycsoportok, ahová járnak tanulók a @osztalyCsoportId-ból */
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_TANULOCSOPORT_OSSZES tcs2 ON tcs2.C_TANULOID = tcs.C_TANULOID
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = tcs2.C_OSZTALYCSOPORTID and ocs.TOROLT='F'
WHERE tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId
AND tcs.C_BELEPESDATUM <= @end AND (tcs.C_KILEPESDATUM > @start OR tcs.C_KILEPESDATUM IS NULL)
AND tcs2.C_BELEPESDATUM <= @end AND (tcs2.C_KILEPESDATUM > @start OR tcs2.C_KILEPESDATUM IS NULL)
AND tcs.TOROLT = 'F'
AND tcs2.TOROLT = 'F'
AND ocs.C_FELADATKATEGORIAID = @kategoriaId
RETURN
END
GO