kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20170327110702_Init/Functions/fnGetTanuloTantargyMulasztasMegtartottOra.sql
2024-03-13 00:33:46 +01:00

116 lines
5.3 KiB
Transact-SQL

IF OBJECT_ID(N'fnGetTanuloTantargyMulasztasMegtartottOra') IS NOT NULL BEGIN
DROP FUNCTION fnGetTanuloTantargyMulasztasMegtartottOra
END
GO
CREATE FUNCTION fnGetTanuloTantargyMulasztasMegtartottOra (
@magantanulo int, /*1 - Nem kell megjelennie, 2 - Csak gyakorlaton, 3 - Minden órán*/
@iskolaErdekuTavolletSzamit bit,
@parhuzamosOraSzamit bit,
@intezmenyId int,
@tanevId int
)
RETURNS TABLE
AS
RETURN (
SELECT xx.C_TANTARGYID, xx.C_OSZTALYCSOPORTID, xx.C_ORATANULOIID, xx.HIANYZAS, xx.KESES, s.MEGTARTOTT AS MEGTARTOTTORA FROM (
SELECT x.C_TANTARGYID, x.C_OSZTALYCSOPORTID, x.C_ORATANULOIID, x.HIANYZAS, x.KESES,
CASE
WHEN TANORANKIVULIFOGLALKOZAS = 'T' THEN 100
WHEN t.C_GYAKORLATI = 'F' THEN 45
ELSE 60
END AS OSZTANI
FROM (
SELECT o.C_TANTARGYID, o.C_OSZTALYCSOPORTID, m.C_ORATANULOIID,
SUM(
CASE
WHEN m.C_TIPUS = 1500 AND tm.ID IS NOT NULL AND o.C_ORAKEZDETE BETWEEN tm.C_KEZDETE AND DATEADD(d, 1, tm.C_VEGE) AND tm.C_ORAMENTESITES = 'T' THEN 0
WHEN m.C_TIPUS = 1500 AND m.C_IGAZOLASTIPUSA = 1533 AND @iskolaErdekuTavolletSzamit = 0 THEN 0
WHEN m.C_TIPUS = 1500 AND @parhuzamosOraSzamit = 1 THEN IIF(y.RN = 1, 1, 0)
WHEN m.C_TIPUS = 1500 THEN 1
ELSE 0
END
) AS HIANYZAS,
SUM(
IIF(o.C_TANORANKIVULIFOGLALKOZAS = 'T',
CAST((ISNULL(m.C_KESESPERCBEN, 0) / CAST(DATEDIFF(mi, o.C_ORAKEZDETE, o.C_ORAVEGE) AS float) * 100) AS int),
ISNULL(m.C_KESESPERCBEN, 0))
) AS KESES,
MIN(o.C_TANORANKIVULIFOGLALKOZAS) TANORANKIVULIFOGLALKOZAS
FROM T_TANULOMULASZTAS m
INNER JOIN T_TANITASIORA_OSSZES o ON m.C_TANITASIORAKID = o.ID
LEFT JOIN T_TANULOMENTESSEG_OSSZES tm ON tm.C_TANTARGYID = o.C_TANTARGYID AND tm.C_TANULOID = m.C_ORATANULOIID AND tm.C_TANEVID = 15 /*majd tanév is ide*/
LEFT JOIN T_FOGLALKOZAS_OSSZES f ON f.id = o.C_FOGLALKOZASID
LEFT JOIN (
SELECT sm.ID, ROW_NUMBER() OVER(PARTITION BY sm.C_ORATANULOIID, so.C_DATUM, so.C_ORASZAM ORDER BY so.C_TANORANKIVULIFOGLALKOZAS, so.C_TANTARGYID) RN
FROM T_TANULOMULASZTAS_OSSZES sm
INNER JOIN T_TANITASIORA_OSSZES so ON so.ID = sm.C_TANITASIORAKID
WHERE sm.TOROLT = 'F' AND sm.C_TIPUS = 1500
) y ON y.ID = m.ID
INNER JOIN T_TANULO_OSSZES tn ON tn.ID = m.C_ORATANULOIID
WHERE (f.C_MULASZTASKELL = 'T' OR f.C_MULASZTASKELL IS NULL)
AND tn.C_MAGANTANULO = 'F'
AND m.C_INTEZMENYID = @intezmenyId
AND m.C_TANEVID = @tanevId
GROUP BY o.C_OSZTALYCSOPORTID, o.C_TANTARGYID, m.C_ORATANULOIID
) x
INNER JOIN T_TANTARGY_OSSZES t ON x.C_TANTARGYID = t.ID
UNION ALL
SELECT x.C_TANTARGYID, x.C_OSZTALYCSOPORTID, x.C_ORATANULOIID, x.HIANYZAS, x.KESES,
CASE
WHEN TANORANKIVULIFOGLALKOZAS = 'T' THEN 100
WHEN x.C_GYAKORLATI = 'F' THEN 45
ELSE 60
END AS OSZTANI
FROM (
SELECT o.C_TANTARGYID, o.C_OSZTALYCSOPORTID, m.C_ORATANULOIID, MIN(t.C_GYAKORLATI) C_GYAKORLATI,
SUM(
CASE
WHEN m.C_TIPUS = 1500 THEN
CASE
WHEN tm.ID IS NOT NULL AND o.C_ORAKEZDETE BETWEEN tm.C_KEZDETE AND DATEADD(d, 1, tm.C_VEGE) AND tm.C_ORAMENTESITES = 'T' THEN 0
WHEN m.C_IGAZOLASTIPUSA = 1533 AND @iskolaErdekuTavolletSzamit = 0 THEN 0
WHEN @magantanulo = 1 THEN 0
WHEN @magantanulo = 2 AND t.C_GYAKORLATI = 'F' THEN 0
WHEN @parhuzamosOraSzamit = 1 THEN IIF(y.RN = 1, 1, 0)
ELSE 1
END
ELSE 0
END
) AS HIANYZAS,
SUM(
IIF(o.C_TANORANKIVULIFOGLALKOZAS = 'T',
CAST((ISNULL(m.C_KESESPERCBEN, 0) / CAST(DATEDIFF(mi, o.C_ORAKEZDETE, o.C_ORAVEGE) AS float) * 100) AS int),
ISNULL(m.C_KESESPERCBEN, 0))
) AS KESES,
MIN(o.C_TANORANKIVULIFOGLALKOZAS) TANORANKIVULIFOGLALKOZAS
FROM T_TANULOMULASZTAS_OSSZES m
INNER JOIN T_TANITASIORA_OSSZES o ON m.C_TANITASIORAKID = o.ID
LEFT JOIN T_TANULOMENTESSEG_OSSZES tm ON tm.C_TANTARGYID = o.C_TANTARGYID AND tm.C_TANULOID = m.C_ORATANULOIID AND tm.C_TANEVID = 15 /*majd tanév is ide*/
LEFT JOIN T_FOGLALKOZAS_OSSZES f ON f.id = o.C_FOGLALKOZASID
LEFT JOIN (
SELECT M.ID, ROW_NUMBER() OVER(PARTITION BY m.C_ORATANULOIID, o.C_DATUM, o.C_ORASZAM ORDER BY o.C_TANORANKIVULIFOGLALKOZAS, o.C_TANTARGYID) RN
FROM T_TANULOMULASZTAS_OSSZES m
INNER JOIN T_TANITASIORA_OSSZES o ON o.ID = m.C_TANITASIORAKID
WHERE m.TOROLT = 'F' AND m.C_TIPUS = 1500
) y ON y.ID = m.ID
INNER JOIN T_TANULO_OSSZES tn ON tn.ID = m.C_ORATANULOIID
INNER JOIN T_TANTARGY_OSSZES t ON o.C_TANTARGYID = t.ID
WHERE (f.C_MULASZTASKELL = 'T' OR f.C_MULASZTASKELL IS NULL)
AND tn.C_MAGANTANULO = 'T'
AND m.C_INTEZMENYID = @intezmenyId
AND m.C_TANEVID = @tanevId
GROUP BY o.C_OSZTALYCSOPORTID, o.C_TANTARGYID, m.C_ORATANULOIID
) x
) xx
LEFT JOIN (
SELECT C_TANTARGYID, C_OSZTALYCSOPORTID, COUNT(1) AS MEGTARTOTT
FROM T_TANITASIORA_OSSZES
WHERE C_SORSZAMOZANDO = 'T'
GROUP BY C_TANTARGYID, C_OSZTALYCSOPORTID
) s ON s.C_TANTARGYID = xx.C_TANTARGYID AND s.C_OSZTALYCSOPORTID = xx.C_OSZTALYCSOPORTID
);
GO