56 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			2.3 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 fnGetKapcsolodoOsztalycsoportok
 | 
						|
GO
 | 
						|
 | 
						|
CREATE FUNCTION [dbo].[fnGetKapcsolodoOsztalycsoportok] (
 | 
						|
   @osztalyCsoportId int
 | 
						|
  ,@pFeladatKategoriaId int = NULL
 | 
						|
) RETURNS TABLE
 | 
						|
RETURN (
 | 
						|
  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
 | 
						|
	INNER JOIN T_TANEV_OSSZES tanev ON tanev.ID = tcs.C_TANEVID AND tanev.TOROLT = 'F'
 | 
						|
  WHERE tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId
 | 
						|
    AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= tanev.C_UTOLSOTANITASINAP) 
 | 
						|
    AND tcs2.C_BELEPESDATUM <= GETDATE() AND (tcs2.C_KILEPESDATUM > GETDATE() OR tcs2.C_KILEPESDATUM IS NULL OR tcs2.C_KILEPESDATUM >= tanev.C_UTOLSOTANITASINAP) 
 | 
						|
    AND tcs.TOROLT = 'F'
 | 
						|
    AND tcs2.TOROLT = 'F'
 | 
						|
    AND (ocs.C_FELADATKATEGORIAID = @pFeladatKategoriaId OR @pFeladatKategoriaId IS NULL)
 | 
						|
)
 | 
						|
GO |