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

211 lines
9.1 KiB
Transact-SQL

IF OBJECT_ID('[dbo].[sp_GetTanulokMulasztasaiKesesei]') IS NOT NULL BEGIN
DROP PROCEDURE [dbo].[sp_GetTanulokMulasztasaiKesesei]
END
GO
CREATE PROCEDURE [dbo].[sp_GetTanulokMulasztasaiKesesei]
@intezmenyId int,
@tanevId int,
@osztalyCsoportId int,
@kesesTipus int,
@elmeletiOraPercben int = 45,
@gyakorlatiOraPercben int = 60
AS BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @osztalyCsoportNev nvarchar(200)
(SELECT @osztalyCsoportNev = C_NEV FROM T_OSZTALYCSOPORT WHERE ID = @osztalyCsoportId)
SELECT
m.tanuloId AS TanuloId
,fh.C_NYOMTATASINEV AS TanuloNev
,fh.C_SZULETESIDATUM AS SzuletesiIdo
,fh.C_ANYJANEVE AS AnyjaNeve
,@osztalyCsoportNev AS OsztCsopNev
,ISNULL(m.[hianyzasIgazolandoTanorai], 0) AS TanoraiHianyzasIgazolando
,ISNULL(m.[hianyzasIgazolandoTanoranKivuli], 0) AS TanoranKivuliHianyzasIgazolando
,ISNULL(m.[hianyzasIgazoltTanorai], 0) AS TanoraiHianyzasIgazolt
,ISNULL(m.[hianyzasIgazoltTanoranKivuli], 0) AS TanoranKivuliHianyzasIgazolt
,ISNULL(m.[hianyzasIgazolatlanTanorai], 0) AS TanoraiHianyzasIgazolatlan
,ISNULL(m.[hianyzasIgazolatlanTanoranKivuli], 0) AS TanoranKivuliHianyzasIgazolatlan
,ISNULL(m.[kesesIgazolandoTanorai], 0) AS TanoraiKesesDarabszamIgazolando
,ISNULL(m.[kesesIgazoltTanorai], 0) AS TanoraiKesesDarabszamIgazolt
,ISNULL(m.[kesesIgazolatlanTanorai], 0) AS TanoraiKesesDarabszamIgazolatlan
,ISNULL(k.[kesesIgazolandoTanoraiPerc], 0) AS TanoraiKesesIgazolandoPerc
,ISNULL(k.[kesesIgazoltTanoraiPerc], 0) AS TanoraiKesesIgazoltPerc
,ISNULL(k.[kesesIgazolatlanTanoraiPerc], 0) AS TanoraiKesesIgazolatlanPerc
,ISNULL(kp.[kesesIgazolandoTanoraiPluszOra], 0) AS SzamitottKesesIgazolando
,ISNULL(kp.[kesesIgazoltTanoraiPluszOra], 0) AS SzamitottKesesIgazolt
,ISNULL(kp.[kesesIgazolatlanTanoraiPluszOra], 0) AS SzamitottKesesIgazolatlan
FROM (
SELECT
tanuloId
,[hianyzasIgazolandoTanorai]
,[hianyzasIgazolandoTanoranKivuli]
,[hianyzasIgazoltTanorai]
,[hianyzasIgazoltTanoranKivuli]
,[hianyzasIgazolatlanTanorai]
,[hianyzasIgazolatlanTanoranKivuli]
,[kesesIgazolandoTanorai]
,[kesesIgazoltTanorai]
,[kesesIgazolatlanTanorai]
FROM (
SELECT
x.tanuloId
,CASE mulasztasTipus WHEN 1500 THEN 'Hianyzas' WHEN 1499 THEN 'Keses' END +
CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
CASE isTanorai WHEN 'T' THEN 'Tanorai' WHEN 'F' THEN 'TanoranKivuli' END AS piv
,cnt
FROM (
SELECT
m.C_ORATANULOIID AS tanuloId,
m.C_TIPUS mulasztasTipus,
m.C_IGAZOLT isIgazolt,
IIF(cs.ID IS NULL OR cs.C_TIPUSA = 1034, 'T', 'F') AS isTanorai,
COUNT(1) AS cnt
FROM T_TANULOMULASZTAS_OSSZES m
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
WHERE m.C_INTEZMENYID = @intezmenyId AND m.C_TANEVID = @tanevId
AND m.Torolt ='F'
AND EXISTS (SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId AND tcs.C_TANULOID = m.C_ORATANULOIID AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL))
GROUP BY m.C_ORATANULOIID, m.C_TIPUS, m.C_IGAZOLT, IIF(cs.ID IS NULL OR cs.C_TIPUSA = 1034, 'T', 'F')
) x
) p
PIVOT (
MAX(cnt)
FOR piv IN
([hianyzasIgazolandoTanorai], [hianyzasIgazolandoTanoranKivuli], [hianyzasIgazoltTanorai], [hianyzasIgazoltTanoranKivuli], [hianyzasIgazolatlanTanorai], [hianyzasIgazolatlanTanoranKivuli], [kesesIgazolandoTanorai], [kesesIgazoltTanorai], [kesesIgazolatlanTanorai])
) AS pvt
) m
LEFT JOIN (
SELECT
tanuloId
,[kesesIgazolandoTanoraiPerc]
,[kesesIgazoltTanoraiPerc]
,[kesesIgazolatlanTanoraiPerc]
FROM (
SELECT
x.tanuloId
,'Keses' +
CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
'TanoraiPerc' AS piv
,kesesPercben
FROM (
SELECT
m.C_ORATANULOIID AS tanuloId
,m.C_IGAZOLT isIgazolt
,SUM(m.C_KESESPERCBEN) AS kesesPercben
FROM T_TANULOMULASZTAS_OSSZES m
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
WHERE m.C_INTEZMENYID = @intezmenyId
AND m.C_TANEVID = @tanevId
AND m.Torolt ='F'
AND EXISTS (SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId AND tcs.C_TANULOID = m.C_ORATANULOIID AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL))
AND (cs.ID IS NULL OR cs.C_TIPUSA = 1034)
AND m.C_TIPUS = 1499
GROUP BY m.C_ORATANULOIID, m.C_IGAZOLT
) x
) p
PIVOT (
MAX(kesesPercben)
FOR piv IN
([kesesIgazolandoTanoraiPerc], [kesesIgazoltTanoraiPerc], [kesesIgazolatlanTanoraiPerc])
) AS pvt
) k ON k.tanuloId = m.tanuloId
LEFT JOIN (
SELECT
tanuloId
,[kesesIgazolandoTanoraiPluszOra]
,[kesesIgazoltTanoraiPluszOra]
,[kesesIgazolatlanTanoraiPluszOra]
FROM (
SELECT
x.tanuloId
,'Keses' +
CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
'TanoraiPluszOra' AS piv
,kesesOraban
FROM (
SELECT
xx.tanuloId
,xx.isIgazolt
,SUM(xx.keses / (CASE WHEN isGyakorlati = 'F' THEN @elmeletiOraPercben ELSE @gyakorlatiOraPercben END)) AS kesesOraban
FROM (
SELECT
m.C_ORATANULOIID AS tanuloId
,m.C_IGAZOLT isIgazolt
--,tn.C_FOGLALKOZASID AS foglalkozasId
,t.C_GYAKORLATI AS isGyakorlati
,SUM(m.C_KESESPERCBEN) AS keses
FROM T_TANULOMULASZTAS_OSSZES m
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
INNER JOIN T_TANTARGY_OSSZES t ON t.ID = tn.C_TANTARGYID
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
WHERE m.C_INTEZMENYID = @intezmenyId AND m.C_TANEVID = @tanevId
AND EXISTS (SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID = @osztalyCsoportId AND tcs.C_TANULOID = m.C_ORATANULOIID AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL))
AND (cs.ID IS NULL OR cs.C_TIPUSA = 1034)
AND m.C_TIPUS = 1499
AND m.TOROLT = 'F'
GROUP BY m.C_ORATANULOIID, m.C_IGAZOLT/*, tn.C_FOGLALKOZASID*/, t.C_GYAKORLATI
) xx
GROUP BY tanuloId, xx.isIgazolt
) x
) p
PIVOT (
MAX(kesesOraban)
FOR piv IN
([kesesIgazolandoTanoraiPluszOra], [kesesIgazoltTanoraiPluszOra], [kesesIgazolatlanTanoraiPluszOra])
) AS pvt
) kp ON m.tanuloId = kp.tanuloId
INNER JOIN T_FELHASZNALO fh ON fh.ID = m.tanuloId
END
SELECT
tanuloId
,[kesesIgazolandoTanoraiPluszOra]
,[kesesIgazoltTanoraiPluszOra]
,[kesesIgazolatlanTanoraiPluszOra]
FROM (
SELECT
x.tanuloId
,'Keses' +
CASE WHEN isIgazolt IS NULL THEN 'Igazolando' WHEN isIgazolt = 'T' THEN 'Igazolt' WHEN isIgazolt = 'F' THEN 'Igazolatlan' END +
'TanoraiPluszOra' AS piv
,kesesOraban
FROM (
SELECT
xx.tanuloId
,xx.isIgazolt
,SUM(xx.keses / (CASE WHEN isGyakorlati = 'F' THEN 45 ELSE 60 END)) AS kesesOraban
FROM (
SELECT
m.C_ORATANULOIID AS tanuloId
,m.C_IGAZOLT isIgazolt
--,tn.C_FOGLALKOZASID AS foglalkozasId
,t.C_GYAKORLATI AS isGyakorlati
,SUM(m.C_KESESPERCBEN) AS keses
FROM T_TANULOMULASZTAS_OSSZES m
INNER JOIN T_TANITASIORA_OSSZES tn ON tn.ID = m.C_TANITASIORAKID
INNER JOIN T_TANTARGY_OSSZES t ON t.ID = tn.C_TANTARGYID
LEFT JOIN T_CSOPORT_OSSZES cs ON tn.C_OSZTALYCSOPORTID = cs.ID
WHERE m.C_INTEZMENYID = @intezmenyId AND m.C_TANEVID = @tanevId
AND EXISTS (SELECT 1 FROM T_TANULOCSOPORT_OSSZES tcs WHERE tcs.C_OSZTALYCSOPORTID = 282 AND tcs.C_TANULOID = m.C_ORATANULOIID AND tcs.C_BELEPESDATUM <= GETDATE() AND (tcs.C_KILEPESDATUM > GETDATE() OR tcs.C_KILEPESDATUM IS NULL))
AND (cs.ID IS NULL OR cs.C_TIPUSA = 1034)
AND m.C_TIPUS = 1499
AND m.TOROLT = 'F'
GROUP BY m.C_ORATANULOIID, m.C_IGAZOLT, t.C_GYAKORLATI
) xx
GROUP BY tanuloId, xx.isIgazolt
) x
) p
PIVOT (
MAX(kesesOraban)
FOR piv IN
([kesesIgazolandoTanoraiPluszOra], [kesesIgazoltTanoraiPluszOra], [kesesIgazolatlanTanoraiPluszOra])
) AS pvt
GO