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

209 lines
7.8 KiB
Transact-SQL

DROP PROCEDURE IF EXISTS [uspGetDolgozatErtekelesAtlag]
GO
CREATE PROCEDURE [uspGetDolgozatErtekelesAtlag]
@pIntezmenyId int
,@pTanevId int
,@pOsztalyCsoportId int
,@pTantargyId int
,@pErtekelesModIdString nvarchar(300)
,@pTanarId int
,@pErtekelesTema nvarchar(255)
,@pAtlagTol float
,@pAtlagIg float
,@pErdemjegy5Tol int
,@pErdemjegy5Ig int
,@pErdemjegy4Tol int
,@pErdemjegy4Ig int
,@pErdemjegy3Tol int
,@pErdemjegy3Ig int
,@pErdemjegy2Tol int
,@pErdemjegy2Ig int
,@pErdemjegy1Tol int
,@pErdemjegy1Ig int
,@pNemIrtDolgozatotTol int
,@pNemIrtDolgozatotIg int
,@pSzuperOsztalyfonok int
,@pDatum datetime
AS BEGIN
SET NOCOUNT ON;
DECLARE @preSql NVARCHAR(MAX), @sql NVARCHAR(MAX) = '';
SET @pErtekelesTema = REPLACE(@pErtekelesTema, ' ', '');
SET @preSql = IIF(@pSzuperOsztalyfonok = 1, '', N'
CREATE TABLE #OsztalyCsoportokTantargyak (
OsztalyCsoportId INT
,OsztalyCsoportNev nvarchar(255)
,TantargyId INT
,PRIMARY KEY(OsztalyCsoportId,TantargyId)
)
INSERT INTO #OsztalyCsoportokTantargyak (
OsztalyCsoportId
,OsztalyCsoportNev
,TantargyId
)
EXEC uspGetTanarAltalErtekelhetoCsoportokTantargyak
@pTanarId
,@pTanevId
,@pDatum
');
SET @sql += @preSql;
SET @preSql = '
CREATE TABLE #Letszam (
C_NAPDATUMA DATETIME
,C_OSZTALYCSOPORTID INT
,Letszam INT
,PRIMARY KEY(C_NAPDATUMA, C_OSZTALYCSOPORTID)
)
INSERT INTO #Letszam(C_NAPDATUMA, C_OSZTALYCSOPORTID, Letszam)
SELECT nn.C_NAPDATUMA, tcs.C_OSZTALYCSOPORTID, COUNT(1) AS Letszam
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_NAPTARINAP_OSSZES nn ON nn.C_NAPDATUMA >= tcs.C_BELEPESDATUM
AND (nn.C_NAPDATUMA <= tcs.C_KILEPESDATUM OR tcs.C_KILEPESDATUM IS NULL)
AND nn.TOROLT = ''F''
WHERE nn.C_TANEVID = @pTanevId
' + IIF(@pOsztalyCsoportId IS NULL, '', 'AND tcs.C_OSZTALYCSOPORTID = @pOsztalyCsoportId') + '
AND tcs.C_TANEVID = @pTanevId
AND tcs.TOROLT = ''F''
GROUP BY nn.C_NAPDATUMA, tcs.C_OSZTALYCSOPORTID
';
SET @sql += @preSql;
SET @preSql = N'
SELECT
sub.Datum
,sub.OsztalyCsoport
,sub.OsztalyCsoportId
,sub.ErtekelesTema
,tgy.C_NEV AS TantargyNev
,sub.TantargyId
,sub.ErtekelesModId
,sub.Erdemjegy1
,sub.Erdemjegy2
,sub.Erdemjegy3
,sub.Erdemjegy4
,sub.Erdemjegy5
,sub.Cnt IrtakDolgozatot
,(letszam.Letszam - sub.Cnt) NemIrtakDolgozatot
,CONVERT(nvarchar(255), sub.Cnt) + ''/'' + CONVERT(nvarchar(255), letszam.Letszam) AS IrtakDolgozatotArany
,ROUND(Total / CAST(Cnt AS Float), 2) AS Atlag
,letszam.Letszam
FROM (
SELECT
s.C_DATUM AS Datum
,s.OsztalyCsoportNev AS OsztalyCsoport
,s.C_OSZTALYCSOPORTID AS OsztalyCsoportId
,s.C_ERTEKELESTEMA AS ErtekelesTema
,s.C_TANTARGYID AS TantargyId
,s.C_ERTEKELESMODID AS ErtekelesModId
,s.[1501] AS Erdemjegy1
,s.[1502] AS Erdemjegy2
,s.[1503] AS Erdemjegy3
,s.[1504] AS Erdemjegy4
,s.[1505] AS Erdemjegy5
,s.[1501] + s.[1502] + s.[1503] + s.[1504] + s.[1505] AS Cnt
,s.[1501] + s.[1502] * 2 + s.[1503] * 3 + s.[1504] * 4 + s.[1505] * 5 AS Total
FROM (
SELECT
er.C_DATUM
,er.C_OSZTALYCSOPORTID
,er.C_ERTEKELESTEMA
,er.C_TANTARGYID
,er.C_ERTEKELESOSZTALYZATID
,er.C_ERTEKELESMODID
,ocs.C_NEV AS OsztalyCsoportNev
FROM T_TANULOERTEKELES_OSSZES er
INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = er.C_OSZTALYCSOPORTID AND ocs.TOROLT=''F'' AND ocs.C_TANEVID = er.C_TANEVID
INNER JOIN T_ERTEKELESTIPUS_OSSZES ertip ON ertip.ID = er.C_TIPUSID AND ertip.TOROLT = ''F'' AND ertip.C_ALTANEVID = er.C_TANEVID
WHERE er.C_TANEVID = @pTanevId
AND er.TOROLT = ''F''
AND ertip.C_ISEGYSZERADHATO = ''F''
AND er.C_ERTEKELESTEMA IS NOT NULL
AND er.C_ERTEKELESOSZTALYZATID IS NOT NULL
' + IIF(@pSzuperOsztalyfonok = 1, N'', N'AND (EXISTS(SELECT 1 FROM #OsztalyCsoportokTantargyak ocst WHERE ocst.OsztalyCsoportId = er.C_OSZTALYCSOPORTID AND ocst.TantargyId = er.C_TANTARGYID))') + N'
' + IIF(@pTantargyId IS NULL, N'', N'AND er.C_TANTARGYID = @pTantargyId') + N'
' + IIF(@pErtekelesTema IS NULL, N'', N'AND REPLACE(er.C_ERTEKELESTEMA,'' '','''') LIKE ''%' + @pErtekelesTema + '%''') + N'
' + IIF(@pOsztalyCsoportId IS NULL, N'', N'AND er.C_OSZTALYCSOPORTID = @pOsztalyCsoportId') + N'
' + IIF(@pErtekelesModIdString IS NULL, N'', N'AND er.C_ERTEKELESMODID IN ('+ @pErtekelesModIdString +')') + N'
) x
PIVOT (COUNT(C_ERTEKELESOSZTALYZATID) FOR C_ERTEKELESOSZTALYZATID IN ([1501], [1502], [1503], [1504], [1505])
) s
WHERE 1 = 1' + '
' + IIF(@pErdemjegy5Tol IS NULL, N'', 'AND s.[1505] >= @pErdemjegy5Tol') + '
' + IIF(@pErdemjegy5Ig IS NULL, N'', 'AND s.[1505] <= @pErdemjegy5Ig') + '
' + IIF(@pErdemjegy4Tol IS NULL, N'', 'AND s.[1504] >= @pErdemjegy4Tol') + '
' + IIF(@pErdemjegy4Ig IS NULL, N'', 'AND s.[1504] <= @pErdemjegy4Ig') + '
' + IIF(@pErdemjegy3Tol IS NULL, N'', 'AND s.[1503] >= @pErdemjegy3Tol') + '
' + IIF(@pErdemjegy3Ig IS NULL, N'', 'AND s.[1503] <= @pErdemjegy3Ig') + '
' + IIF(@pErdemjegy2Tol IS NULL, N'', 'AND s.[1502] >= @pErdemjegy2Tol') + '
' + IIF(@pErdemjegy2Ig IS NULL, N'', 'AND s.[1502] <= @pErdemjegy2Ig') + '
' + IIF(@pErdemjegy1Tol IS NULL, N'', 'AND s.[1501] >= @pErdemjegy1Tol') + '
' + IIF(@pErdemjegy1Ig IS NULL, N'', 'AND s.[1501] <= @pErdemjegy1Ig') + '
) sub
INNER JOIN T_TANTARGY_OSSZES tgy ON sub.TantargyId = tgy.ID AND tgy.TOROLT=''F''
INNER JOIN T_DICTIONARYITEMBASE_OSSZES dTantargy ON tgy.C_TARGYKATEGORIA = dTantargy.ID AND dTantargy.C_TANEVID = @pTanevId AND dTantargy.TOROLT=''F''
INNER JOIN #Letszam letszam ON letszam.C_NAPDATUMA = sub.Datum
AND letszam.C_OSZTALYCSOPORTID = OsztalyCsoportId' + '
' + IIF(@pNemIrtDolgozatotTol IS NULL, N'', N'AND (letszam.Letszam - sub.Cnt) >= @pNemIrtDolgozatotTol') + '
' + IIF(@pNemIrtDolgozatotIg IS NULL, N'', N'AND (letszam.Letszam - sub.Cnt) <= @pNemIrtDolgozatotIg') + '
' + IIF(@pAtlagTol IS NULL, N'', N'AND ROUND(Total / CAST(Cnt AS Float), 2) >= @pAtlagTol') + '
' + IIF(@pAtlagIg IS NULL, N'', N'AND ROUND(Total / CAST(Cnt AS Float), 2) <= @pAtlagIg') + '
'
SET @sql += @preSql;
EXEC sp_executesql @sql, N'
@pIntezmenyId int
,@pTanevId int
,@pOsztalyCsoportId int
,@pTantargyId int
,@pTanarId int
,@pErtekelesModIdString nvarchar(300)
,@pErtekelesTema nvarchar(255)
,@pAtlagTol float
,@pAtlagIg float
,@pErdemjegy5Tol int
,@pErdemjegy5Ig int
,@pErdemjegy4Tol int
,@pErdemjegy4Ig int
,@pErdemjegy3Tol int
,@pErdemjegy3Ig int
,@pErdemjegy2Tol int
,@pErdemjegy2Ig int
,@pErdemjegy1Tol int
,@pErdemjegy1Ig int
,@pNemIrtDolgozatotTol int
,@pNemIrtDolgozatotIg int
,@pSzuperOsztalyfonok int
,@pDatum datetime'
,@pIntezmenyId = @pIntezmenyId
,@pTanevId = @pTanevId
,@pOsztalyCsoportId = @pOsztalyCsoportId
,@pTantargyId = @pTantargyId
,@pErtekelesModIdString = @pErtekelesModIdString
,@pTanarId = @pTanarId
,@pErtekelesTema = @pErtekelesTema
,@pAtlagTol = @pAtlagTol
,@pAtlagIg = @pAtlagIg
,@pErdemjegy5Tol = @pErdemjegy5Tol
,@pErdemjegy5Ig = @pErdemjegy5Ig
,@pErdemjegy4Tol = @pErdemjegy4Tol
,@pErdemjegy4Ig = @pErdemjegy4Ig
,@pErdemjegy3Tol = @pErdemjegy3Tol
,@pErdemjegy3Ig = @pErdemjegy3Ig
,@pErdemjegy2Tol = @pErdemjegy2Tol
,@pErdemjegy2Ig = @pErdemjegy2Ig
,@pErdemjegy1Tol = @pErdemjegy1Tol
,@pErdemjegy1Ig = @pErdemjegy1Ig
,@pNemIrtDolgozatotTol = @pNemIrtDolgozatotTol
,@pNemIrtDolgozatotIg = @pNemIrtDolgozatotIg
,@pSzuperOsztalyfonok = @pSzuperOsztalyfonok
,@pDatum = @pDatum
END
GO