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

78 lines
2.7 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS uspGetBukasokSzama
GO
CREATE PROCEDURE uspGetBukasokSzama
@pTanevId int
,@pTanarId int
,@pDarab int
,@pBukasAtlag float
AS BEGIN
SET NOCOUNT ON;
DECLARE
@pBelepesDatum date
,@pKilepesDatum date
,@pUtolsoTanitasDatum date
SELECT
@pBelepesDatum = (CASE WHEN tanev.C_AKTIV = 'T' THEN GETDATE() ELSE tanev.C_UTOLSOTANITASINAP END)
,@pKilepesDatum = (CASE WHEN tanev.C_AKTIV = 'T' THEN GETDATE() ELSE tanev.C_KEZDONAP END)
,@pUtolsoTanitasDatum = tanev.C_UTOLSOTANITASINAP
FROM T_TANEV_OSSZES tanev
WHERE tanev.TOROLT = 'F'
AND tanev.ID = @pTanevId
SELECT TOP (@pDarab)
fh.C_NYOMTATASINEV AS Nev
,ocs.C_NEV AS Osztaly
,COUNT(ertekeles.C_TANTARGYID) AS TantargyakSzama
FROM T_FOGLALKOZAS_OSSZES f
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON f.C_OSZTALYCSOPORTID = ocs.ID
AND ocs.C_TANEVID = f.C_TANEVID
AND ocs.TOROLT = 'F'
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON ocs.ID = tcs.C_OSZTALYCSOPORTID
AND tcs.C_BELEPESDATUM <= @pBelepesDatum
AND (tcs.C_KILEPESDATUM > @pKilepesDatum OR tcs.C_KILEPESDATUM IS NULL OR tcs.C_KILEPESDATUM >= @pUtolsoTanitasDatum)
AND tcs.C_TANEVID = f.C_TANEVID
AND tcs.TOROLT = 'F'
INNER JOIN T_FELHASZNALO_OSSZES fh ON tcs.C_TANULOID = fh.ID
AND fh.C_TANEVID = f.C_TANEVID
AND fh.TOROLT = 'F'
INNER JOIN (
SELECT
te.C_TANULOID
,te.C_OSZTALYCSOPORTID
,te.C_TANTARGYID
FROM T_TANULOERTEKELES_OSSZES te
INNER JOIN T_OSZTALYZATTIPUS_OSSZES ot ON te.C_ERTEKELESOSZTALYZATID = ot.ID
AND ot.C_ALTANEVID = te.C_TANEVID
AND ot.TOROLT = 'F'
INNER JOIN T_DICTIONARYITEMBASE_OSSZES d ON ot.ID = d.ID
AND d.C_TANEVID = te.C_TANEVID
AND d.TOROLT = 'F'
LEFT JOIN T_ERTEKELESMOD_OSSZES em ON em.ID = te.C_ERTEKELESMODID
AND em.C_ALTANEVID = te.C_TANEVID
AND em.TOROLT = 'F'
AND te.C_ERTEKELESOSZTALYZATID IS NOT NULL
WHERE te.C_TANEVID = @pTanevId
AND te.TOROLT = 'F'
GROUP BY
te.C_TANULOID
,te.C_OSZTALYCSOPORTID
,te.C_TANTARGYID
HAVING ROUND(SUM(CAST(d.C_VALUE AS float) * CAST(ISNULL(em.C_SULY, 100) AS float) / 100) / SUM(CAST(ISNULL(em.C_SULY, 100) AS float) / 100), 2) < @pBukasAtlag
) ertekeles ON ertekeles.C_TANULOID = fh.ID
AND ertekeles.C_OSZTALYCSOPORTID = f.C_OSZTALYCSOPORTID
AND ertekeles.C_TANTARGYID = f.C_TANTARGYID
WHERE f.C_TANEVID = @pTanevId
AND f.TOROLT = 'F'
AND f.C_TANARID = @pTanarId
GROUP BY
fh.C_NYOMTATASINEV
,ocs.C_NEV
ORDER BY
fh.C_NYOMTATASINEV
,ocs.C_NEV
END
GO