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

193 lines
11 KiB
Transact-SQL

IF OBJECT_ID('sp_GetBizonyitvany12161') IS NOT NULL
DROP PROCEDURE sp_GetBizonyitvany12161
GO
CREATE PROCEDURE sp_GetBizonyitvany12161
@osztalyCsoportId int,
@felev int,
@TanevId int
AS
BEGIN
IF OBJECT_ID('tempdb..#TANTARGY') IS NOT NULL BEGIN
DROP TABLE #TANTARGY
END
CREATE TABLE #TANTARGY (
ID int primary key,
NEV nvarchar(255),
ORAK int,
OSZTALYFONOKI bit
)
INSERT INTO #TANTARGY (ID, NEV, ORAK, OSZTALYFONOKI)
SELECT
T_TANTARGY_OSSZES.ID AS ID,
T_TANTARGY_OSSZES.C_NEV AS NEV,
COUNT(T_TANITASIORA_OSSZES.ID) AS ORAK,
IIF(D.C_NAME = 'Osztályfőnöki, élet- és pályatervezés', 1, 0) AS OSZTALYFONOKI
FROM T_TANTARGY_OSSZES
INNER JOIN T_TANITASIORA_OSSZES on T_TANTARGY_OSSZES.ID = T_TANITASIORA_OSSZES.C_TANTARGYID AND T_TANITASIORA_OSSZES.TOROLT='F'
INNER JOIN T_FOGLALKOZAS_OSSZES ON T_TANTARGY_OSSZES.ID = T_FOGLALKOZAS_OSSZES.C_TANTARGYID AND T_FOGLALKOZAS_OSSZES.TOROLT='F'
INNER JOIN T_TANEV_OSSZES ON T_FOGLALKOZAS_OSSZES.C_TANEVID = T_TANEV_OSSZES.ID AND T_TANEV_OSSZES.TOROLT = 'F'
INNER JOIN T_DICTIONARYITEMBASE_OSSZES D ON T_TANTARGY_OSSZES.C_TARGYKATEGORIA = D.ID
WHERE T_TANTARGY_OSSZES.TOROLT = 'F'
AND T_FOGLALKOZAS_OSSZES.C_OSZTALYCSOPORTID = @osztalyCsoportId
AND T_TANITASIORA_OSSZES.C_DATUM BETWEEN T_TANEV_OSSZES.C_ELSOTANITASINAP AND T_TANEV_OSSZES.C_UTOLSOTANITASINAP
AND T_TANITASIORA_OSSZES.C_MEGTARTOTT = 'T'
AND T_TANEV_OSSZES.ID = @TanevId
GROUP BY T_TANTARGY_OSSZES.ID,T_TANTARGY_OSSZES.C_NEV, IIF(D.C_NAME = 'Osztályfőnöki, élet- és pályatervezés', 1, 0)
DECLARE @jegySelect nvarchar(MAX) = N'',
@jegyFrom nvarchar(MAX) = N'FROM T_TANULOCSOPORT_OSSZES TCS',
@jegyWhere nvarchar(MAX),
@sql nvarchar(MAX),
@bizSelect nvarchar(MAX),
@bizJoin nvarchar(MAX),
@mulSql nvarchar(MAX),
@felevJegy int
SELECT @felevJegy = ID
FROM T_DICTIONARYITEMBASE_OSSZES
WHERE C_TYPE = 'ErtekelesTipus'
AND C_TANEVID = @TanevId
AND C_NAME = IIF(@felev = 1, 'Félévi jegy/értékelés', 'Évvégi jegy/értékelés')
SET @bizSelect =
'SELECT * FROM (
SELECT
T_FELHASZNALO_OSSZES.ID AS [BIZTANULOID],
T_FELHASZNALO_OSSZES.C_NYOMTATASINEV AS [név],
T_FELHASZNALO_OSSZES.C_VEZETEKNEV + '' '' + T_FELHASZNALO_OSSZES.C_UTONEV AS [családi és utónév],
T_FELHASZNALO_OSSZES.C_SZULETESIHELY AS [szül_hely_település],
Orszag.C_NAME AS [szül_hely_ország],
CONVERT(DATE,T_FELHASZNALO_OSSZES.C_SZULETESIDATUM) AS [szül_idő],
Allampolg.C_NAME AS [állampolgárság],
Anyanyelv.C_NAME AS [anyanyelv],
T_FELHASZNALO_OSSZES.C_ANYJANEVE AS [anyja_neve],
T_GONDVISELO_OSSZES.C_NEV AS [apa_neve],
T_INTEZMENYADATOK_OSSZES.C_VAROS AS [kelt_település],
YEAR(GETDATE()) AS [kelt_év],
MONTH(GETDATE()) AS [kelt_hó],
DAY(GETDATE()) AS [kelt_nap],
T_FELHASZNALO_OSSZES.C_OKTATASIAZONOSITO AS [om_azonosító],
'''' AS [törzslapszám_szám],
ROW_NUMBER() OVER (ORDER BY T_FELHASZNALO_OSSZES.C_NYOMTATASINEV) AS [törzslapszám_év],
T_FELHASZNALO_OSSZES.C_NYOMTATASINEV AS [név2],
YEAR(T_TANEV_OSSZES.C_KEZDONAP) AS [tanév_tól],
YEAR(T_TANEV_OSSZES.C_UTOLSONAP) AS [tanév_ig],
IIF(@felev = 1, ''Első'', ''Második'') AS [félév],
T_INTEZMENYADATOK_OSSZES.C_NEV + '' '' + T_MUKODESIHELY_OSSZES.C_NEV + '', ''+ T_MUKODESIHELY_OSSZES.C_IRANYITOSZAM + '' '' + T_MUKODESIHELY_OSSZES.C_VAROS + T_MUKODESIHELY_OSSZES.C_CIME AS [iskola_neve_címe],
IskolaTipus.C_NAME AS [iskola_tipus],
Evfolyam.C_NAME AS [évfolyam_száma],
T_OSZTALYCSOPORT_OSSZES.C_NEV AS [osztály],
DM.C_NAME AS [magatartás],
DSZ.C_NAME AS [szorgalom]
FROM T_FELHASZNALO_OSSZES
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Orszag ON T_FELHASZNALO_OSSZES.C_SZULETESIORSZAG = Orszag.ID
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Allampolg ON T_FELHASZNALO_OSSZES.C_ALLAMPOLGARSAGA = Allampolg.ID
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Anyanyelv ON T_FELHASZNALO_OSSZES.C_ANYANYELVE = Anyanyelv.ID
LEFT JOIN T_FELHASZNALOBELEPES_OSSZES ON T_FELHASZNALO_OSSZES.ID = T_FELHASZNALOBELEPES_OSSZES.C_FELHASZNALOID AND T_FELHASZNALOBELEPES_OSSZES.C_GONDVISELOID IS NOT NULL AND T_FELHASZNALOBELEPES_OSSZES.TOROLT=''F''
LEFT JOIN T_GONDVISELO_OSSZES ON T_FELHASZNALOBELEPES_OSSZES.C_GONDVISELOID = T_GONDVISELO_OSSZES.ID AND T_GONDVISELO_OSSZES.C_ROKONSAGFOKA = 2 --Apa
AND T_GONDVISELO_OSSZES.TOROLT=''F''
INNER JOIN T_TANEV_OSSZES ON T_TANEV_OSSZES.TOROLT = ''F''
INNER JOIN T_INTEZMENYADATOK_OSSZES ON T_INTEZMENYADATOK_OSSZES.C_TANEVID = T_TANEV_OSSZES.ID AND T_INTEZMENYADATOK_OSSZES.TOROLT = ''F''
LEFT JOIN T_TANEVRENDJE_OSSZES ON T_TANEVRENDJE_OSSZES.C_NAPTIPUSA = 1400 AND T_TANEVRENDJE_OSSZES.C_TANEVID = T_TANEV_OSSZES.ID AND T_TANEVRENDJE_OSSZES.TOROLT = ''F''
INNER JOIN T_TANULOCSOPORT_OSSZES ON T_FELHASZNALO_OSSZES.ID = T_TANULOCSOPORT_OSSZES.C_TANULOID AND T_TANULOCSOPORT_OSSZES.C_BELEPESDATUM < GETDATE() AND (T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM IS NULL OR T_TANULOCSOPORT_OSSZES.C_KILEPESDATUM > GETDATE()) AND T_TANULOCSOPORT_OSSZES.TOROLT = ''F''
INNER JOIN T_OSZTALYCSOPORT_OSSZES ON T_TANULOCSOPORT_OSSZES.C_OSZTALYCSOPORTID = T_OSZTALYCSOPORT_OSSZES.ID AND T_OSZTALYCSOPORT_OSSZES.TOROLT = ''F''
INNER JOIN T_OSZTALY_OSSZES ON T_OSZTALYCSOPORT_OSSZES.ID = T_OSZTALY_OSSZES.ID AND T_OSZTALY_OSSZES.TOROLT = ''F''
INNER JOIN T_FELADATELLATASIHELY_OSSZES ON T_OSZTALYCSOPORT_OSSZES.C_FELADATELLATASIHELYID = T_FELADATELLATASIHELY_OSSZES.ID AND T_FELADATELLATASIHELY_OSSZES.TOROLT = ''F''
INNER JOIN T_MUKODESIHELY_OSSZES ON T_FELADATELLATASIHELY_OSSZES.C_MUKODESIHELYID = T_MUKODESIHELY_OSSZES.ID AND T_MUKODESIHELY_OSSZES.TOROLT = ''F''
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES IskolaTipus ON T_FELADATELLATASIHELY_OSSZES.C_OKTATASINEVELESIFELADATTIPUS = IskolaTipus.ID
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES Evfolyam ON T_OSZTALYCSOPORT_OSSZES.C_EVFOLYAMTIPUSA = Evfolyam.ID
LEFT JOIN (
SELECT te.C_TANULOID, ofe.C_MAGATARTAS, ofe.C_SZORGALOM FROM T_TANULOERTEKELES_OSSZES te
INNER JOIN T_OSZTALYFONOKIERTEKELES_OSSZES ofe ON ofe.ID = te.ID AND ofe.TOROLT = ''F''
WHERE te.TOROLT = ''F'' AND te.C_ERTEKELESTIPUSA = @felevJegy
) MSZ ON MSZ.C_TANULOID = T_FELHASZNALO_OSSZES.ID
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES DM ON DM.ID = MSZ.C_MAGATARTAS
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES DSZ ON DSZ.ID = MSZ.C_SZORGALOM
WHERE T_OSZTALYCSOPORT_OSSZES.ID = @osztalyCsoportId
AND T_TANEV_OSSZES.ID = @TanevId) BIZ
'
SET @mulSql = '
INNER JOIN (
SELECT tms.C_TANULOID AS MULTANULOID,
SUM(CASE
WHEN tms.C_STATISZTIKATIPUS <> 1655 THEN 0
WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVMULASZTAS
ELSE tms.C_OSSZESELSOFELEVMULASZTAS + tms.C_OSSZESMASODIKFELEVMULASZTAS END
) AS mulasztott_orak_szama,
SUM(CASE
WHEN tms.C_STATISZTIKATIPUS <> 1655 THEN 0
WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVMULASZTAS
ELSE tms.C_OSSZESELSOFELEVMULASZTAS + tms.C_OSSZESMASODIKFELEVMULASZTAS END
) AS mulasztott_orak_osszesen,
SUM(CASE
WHEN tms.C_STATISZTIKATIPUS <> 1655 THEN 0
WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVELMELETI
ELSE tms.C_OSSZESELSOFELEVELMELETI + tms.C_OSSZESMASODIKFELEVELMELETI END
) AS mulasztott_elmelet_osszesen,
SUM(CASE
WHEN tms.C_STATISZTIKATIPUS <> 1662 THEN 0
WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVELMELETI
ELSE tms.C_OSSZESELSOFELEVELMELETI + tms.C_OSSZESMASODIKFELEVELMELETI END
) AS mulasztott_elmelet_igazolatlan,
SUM(CASE
WHEN tms.C_STATISZTIKATIPUS <> 1655 THEN 0
WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVGYAKORLATI
ELSE tms.C_OSSZESELSOFELEVGYAKORLATI + tms.C_OSSZESMASODIKFELEVGYAKORLATI END
) AS mulasztott_gyakorlat_osszesen,
SUM(CASE
WHEN tms.C_STATISZTIKATIPUS <> 1662 THEN 0
WHEN @felev = 1 THEN tms.C_OSSZESELSOFELEVGYAKORLATI
ELSE tms.C_OSSZESELSOFELEVGYAKORLATI + tms.C_OSSZESMASODIKFELEVGYAKORLATI END
) AS mulasztott_gyakorlat_igazolatlan
FROM T_TANULOMULASZTASSTATISZTIKA_OSSZES tms
WHERE tms.C_STATISZTIKATIPUS IN (1655, 1662)
and tms.C_TANEVID = @TanevId
GROUP BY tms.C_TANULOID
) mul ON mul.MULTANULOID = BIZ.BIZTANULOID
'
SELECT @jegySelect += IIF(#TANTARGY.OSZTALYFONOKI = 1, '', ', D' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_NAME AS [' + CAST(#TANTARGY.NEV AS nvarchar(255)) + ' JEGY] ') + ', T' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ORAK AS [' + CAST(#TANTARGY.NEV AS nvarchar(255)) + ' ORAK]',
@jegyFrom += IIF(#TANTARGY.OSZTALYFONOKI = 1, '
LEFT JOIN #TANTARGY T' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON T' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID = ' + CAST(#TANTARGY.ID AS nvarchar(10)) /*Ha osztályfőnöki*/
,'
LEFT JOIN T_TANULOERTEKELES_OSSZES E' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_TANTARGYID = ' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' AND TCS.C_TANULOID = E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_TANULOID AND E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_ERTEKELESTIPUSA = @felevJegy AND E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_OSZTALYCSOPORTID = @osztalyCsoportId AND E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.TOROLT = ''F''
LEFT JOIN T_OSZTALYZATERTEKELES_OSSZES O' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON O' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID = E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID AND O' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.TOROLT = ''F''
LEFT JOIN #TANTARGY T' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON E' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_TANTARGYID = T' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID
LEFT JOIN T_DICTIONARYITEMBASE_OSSZES D' + CAST(#TANTARGY.ID AS nvarchar(10)) + ' ON D' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.ID = O' + CAST(#TANTARGY.ID AS nvarchar(10)) + '.C_OSZTALYZAT' /*Ha nem osztályfőnöki*/) --IIF záró zárójele
FROM #TANTARGY
ORDER BY #TANTARGY.OSZTALYFONOKI DESC
SET @jegyWhere = N'
WHERE TCS.C_OSZTALYCSOPORTID = @osztalyCsoportId'
SET @bizJoin = '
) JEGY ON JEGY.JEGYTANULOID = BIZ.BIZTANULOID'
/*
Ha a @jegySelect üres string, akkor nem volt az osztálynak tantárgya
Így majd kimarad a végső nagy selectből (@sql) is.
*/
IF @jegySelect <> '' BEGIN
SET @jegySelect = 'INNER JOIN (
SELECT TCS.C_TANULOID AS JEGYTANULOID' + @jegySelect
END
SET @sql = @bizSelect + CASE WHEN @jegySelect <> '' THEN @jegySelect + @jegyFrom + @jegyWhere + @bizJoin ELSE '' END + @mulSql
EXEC sp_executesql @sql,
N'@osztalyCsoportId int, @felevJegy int, @felev int, @TanevId int',
@osztalyCsoportId, @felevJegy, @felev, @TanevId
IF OBJECT_ID('tempdb..#TANTARGY') IS NOT NULL BEGIN
DROP TABLE #TANTARGY
END
END
GO