SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF OBJECT_ID('[dbo].[sp_GetOsztalyTanuloinakHaviMulasztasaiOsszesitoje_honapra]') IS NOT NULL BEGIN DROP PROCEDURE [dbo].[sp_GetOsztalyTanuloinakHaviMulasztasaiOsszesitoje_honapra] END GO CREATE PROCEDURE [dbo].[sp_GetOsztalyTanuloinakHaviMulasztasaiOsszesitoje_honapra] @pTanevId INT, @pIntezmenyId INT, @pOsztalyId INT, @pHonap INT, @pElmeletgyakorlat BIT = 0 AS BEGIN --Osztály tanulói CREATE TABLE #tanulo (Id INT) INSERT INTO #tanulo SELECT DISTINCT tcs.c_tanuloid AS Id FROM T_TANULOCSOPORT_OSSZES tcs INNER JOIN T_FELHASZNALO_OSSZES f ON f.id = tcs.c_tanuloid WHERE tcs.torolt='F' AND f.torolt='F' AND tcs.c_tanevid=@pTanevId AND tcs.c_intezmenyid=@pIntezmenyId AND tcs.c_osztalycsoportid=@pOsztalyId; --Igazolástípusok CREATE TABLE #igazolastipus (Id INT, Nev NVARCHAR(MAX), Sorrend INT); INSERT INTO #igazolastipus SELECT T_IGAZOLASTIPUS_OSSZES.ID AS Id, C_NAME AS Nev, C_ORDER AS Sorrrend FROM T_IGAZOLASTIPUS_OSSZES INNER JOIN T_DICTIONARYITEMBASE_OSSZES ON T_IGAZOLASTIPUS_OSSZES.ID = T_DICTIONARYITEMBASE_OSSZES.ID WHERE T_DICTIONARYITEMBASE_OSSZES.C_INTEZMENYID = @pIntezmenyId AND T_DICTIONARYITEMBASE_OSSZES.C_TANEVID = @pTanevId AND T_IGAZOLASTIPUS_OSSZES.C_ALINTEZMENYID = @pIntezmenyId AND T_IGAZOLASTIPUS_OSSZES.C_ALTANEVID = @pTanevId AND T_IGAZOLASTIPUS_OSSZES.TOROLT = 'F' AND T_DICTIONARYITEMBASE_OSSZES.TOROLT = 'F' ORDER BY C_ORDER, C_NAME; --Igazolások és típusai CREATE TABLE #igazolas (Tanulo INT, IgazoltE NVARCHAR(1), IgazolasTipus INT, Gyakorlati CHAR(1), MulasztasTipus INT, KesesPerc INT) INSERT INTO #igazolas SELECT tm.C_ORATANULOIID AS Tanulo, tm.C_IGAZOLT AS IgazoltE, tm.C_IGAZOLASTIPUSA AS IgazolasTipus, IIF(@pElmeletgyakorlat=0, 'F', C_GYAKORLATI) AS Gyakorlati, tm.C_TIPUS AS MulasztasTipus, tm.C_KESESPERCBEN AS KesesPerc FROM T_TANULOMULASZTAS_OSSZES AS tm INNER JOIN T_TANITASIORA_OSSZES tao ON tao.ID = tm.C_TANITASIORAKID INNER JOIN T_TANTARGY_OSSZES ON T_TANTARGY_OSSZES.ID = tao.C_TANTARGYID AND T_TANTARGY_OSSZES.C_TANEVID = tao.C_TANEVID WHERE tao.C_INTEZMENYID = @pIntezmenyId AND tm.C_INTEZMENYID = @pIntezmenyId AND tm.C_TANEVID = @pTanevId AND tao.C_TANEVID = @pTanevId AND tm.TOROLT = 'F' AND tao.TOROLT = 'F' AND (CAST(MONTH(tao.C_DATUM) AS VARCHAR))=@pHonap; --Mulasztások CREATE TABLE #mulasztas (Nap NVARCHAR(5), Tanulo INT, Osztaly INT) INSERT INTO #mulasztas SELECT CAST(CAST(DAY(tao.C_DATUM) AS INT) AS NVARCHAR) + (IIF(@pElmeletgyakorlat=0, '', IIF(C_GYAKORLATI = 'T', '_GY', '_E'))) AS Nap, tm.C_ORATANULOIID AS Tanulo, tao.C_OSZTALYCSOPORTID AS Osztaly FROM T_TANULOMULASZTAS_OSSZES tm INNER JOIN T_TANITASIORA_OSSZES tao ON tao.id=tm.C_TANITASIORAKID INNER JOIN T_TANTARGY_OSSZES ON T_TANTARGY_OSSZES.ID = tao.C_TANTARGYID AND T_TANTARGY_OSSZES.C_TANEVID = tao.C_TANEVID WHERE tao.C_INTEZMENYID = @pIntezmenyId AND tm.C_INTEZMENYID = @pIntezmenyId AND tm.C_TANEVID = @pTanevId AND tao.C_TANEVID = @pTanevId AND tm.TOROLT = 'F' AND tao.TOROLT = 'F' AND (CAST(MONTH(tao.C_DATUM) AS VARCHAR))=@pHonap; DECLARE @query AS NVARCHAR(MAX); IF @pElmeletgyakorlat=0 BEGIN DECLARE @colsHeader AS NVARCHAR(MAX); DECLARE @cols AS NVARCHAR(MAX); SELECT @colsHeader = ISNULL(@colsHeader + ', ', '') + QUOTENAME(Id) + ' AS ' + QUOTENAME(Nev), @cols = ISNULL(@cols + ', ', '') + QUOTENAME(Id) FROM #igazolastipus AS Igazolastipus ORDER BY Sorrend, Nev; SET @query = 'SELECT f.c_nyomtatasinev AS COLUMN108, IIF(m.[1]=0, NULL, m.[1]) AS [1], IIF(m.[2]=0, NULL, m.[2]) AS [2], IIF(m.[3]=0, NULL, m.[3]) AS [3], IIF(m.[4]=0, NULL, m.[4]) AS [4], IIF(m.[5]=0, NULL, m.[5]) AS [5], IIF(m.[6]=0, NULL, m.[6]) AS [6], IIF(m.[7]=0, NULL, m.[7]) AS [7], IIF(m.[8]=0, NULL, m.[8]) AS [8], IIF(m.[9]=0, NULL, m.[9]) AS [9], IIF(m.[10]=0, NULL, m.[10]) AS [10], IIF(m.[11]=0, NULL, m.[11]) AS [11], IIF(m.[12]=0, NULL, m.[12]) AS [12], IIF(m.[13]=0, NULL, m.[13]) AS [13], IIF(m.[14]=0, NULL, m.[14]) AS [14], IIF(m.[15]=0, NULL, m.[15]) AS [15], IIF(m.[16]=0, NULL, m.[16]) AS [16], IIF(m.[17]=0, NULL, m.[17]) AS [17], IIF(m.[18]=0, NULL, m.[18]) AS [18], IIF(m.[19]=0, NULL, m.[19]) AS [19], IIF(m.[20]=0, NULL, m.[20]) AS [20], IIF(m.[21]=0, NULL, m.[21]) AS [21], IIF(m.[22]=0, NULL, m.[22]) AS [22], IIF(m.[23]=0, NULL, m.[23]) AS [23], IIF(m.[24]=0, NULL, m.[24]) AS [24], IIF(m.[25]=0, NULL, m.[25]) AS [25], IIF(m.[26]=0, NULL, m.[26]) AS [26], IIF(m.[27]=0, NULL, m.[27]) AS [27], IIF(m.[28]=0, NULL, m.[28]) AS [28], IIF(m.[29]=0, NULL, m.[29]) AS [29], IIF(m.[30]=0, NULL, m.[30]) AS [30], IIF(m.[31]=0, NULL, m.[31]) AS [31], OSSZES.MULASZTASOKSZAMA AS COLUMN2672, IGAZOLT.IGAZOLTSZAMA AS COLUMN2568, ' + @colsHeader + ', IGAZOLATLAN.IGAZOLATLANSZAMA AS COLUMN1911 FROM #tanulo AS tanulok LEFT JOIN ( SELECT * FROM #igazolas AS igazolasok PIVOT ( COUNT(IgazoltE) FOR IgazolasTipus IN (' + @cols + ')) AS PIVOTTABLE ) AS IGAZOLASTIPUSOKSZERINT ON IGAZOLASTIPUSOKSZERINT.Tanulo = tanulok.Id LEFT JOIN ( SELECT * FROM #mulasztas AS m PIVOT (COUNT(Osztaly) for Nap in ([1], [2], [3], [4], [5], [6], [7], [8], [9], [10], [11], [12], [13], [14], [15], [16], [17], [18], [19], [20], [21], [22], [23], [24], [25], [26], [27], [28], [29], [30], [31])) pv ) m ON m.Tanulo = tanulok.id LEFT JOIN (SELECT Tanulo, COUNT(Tanulo) AS MULASZTASOKSZAMA FROM #igazolas GROUP BY Tanulo) AS OSSZES ON OSSZES.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, COUNT(Tanulo) AS IGAZOLTSZAMA FROM #igazolas i WHERE i.IgazoltE=''T'' GROUP BY Tanulo) AS IGAZOLT ON IGAZOLT.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, COUNT(Tanulo) AS IGAZOLATLANSZAMA FROM #igazolas i WHERE i.IgazoltE=''F'' GROUP BY Tanulo) AS IGAZOLATLAN ON IGAZOLATLAN.Tanulo = tanulok.Id INNER JOIN T_FELHASZNALO_OSSZES f ON f.id = tanulok.Id ORDER BY f.c_nyomtatasinev'; execute(@query); END ELSE BEGIN DECLARE @colsHeader_E AS NVARCHAR(MAX); DECLARE @colsHeader_GY AS NVARCHAR(MAX); DECLARE @cols_E AS NVARCHAR(MAX); DECLARE @cols_GY AS NVARCHAR(MAX); SELECT @colsHeader_E = ISNULL(@colsHeader_E + ', ', '') + QUOTENAME(Id) + ' AS ' + QUOTENAME(Nev + ' (elméleti)'), @colsHeader_GY = ISNULL(@colsHeader_GY + ', ', '') + QUOTENAME(-Id) + ' AS ' + QUOTENAME(Nev + ' (gyakorlati)'), @cols_E = ISNULL(@cols_E + ', ', '') + QUOTENAME(Id), @cols_GY = ISNULL(@cols_GY + ', ', '') + QUOTENAME(-Id) FROM #igazolastipus AS Igazolastipus ORDER BY Sorrend, Nev; SET @query = 'SELECT f.c_nyomtatasinev AS COLUMN108, IIF(m.[1_E]=0, NULL, m.[1_E]) AS [1 E], IIF(m.[1_GY]=0, NULL, m.[1_GY]) AS [1 GY], IIF(m.[2_E]=0, NULL, m.[2_E]) AS [2 E], IIF(m.[2_GY]=0, NULL, m.[2_GY]) AS [2 GY], IIF(m.[3_E]=0, NULL, m.[3_E]) AS [3 E], IIF(m.[3_GY]=0, NULL, m.[3_GY]) AS [3 GY], IIF(m.[4_E]=0, NULL, m.[4_E]) AS [4 E], IIF(m.[4_GY]=0, NULL, m.[4_GY]) AS [4 GY], IIF(m.[5_E]=0, NULL, m.[5_E]) AS [5 E], IIF(m.[5_GY]=0, NULL, m.[5_GY]) AS [5 GY], IIF(m.[6_E]=0, NULL, m.[6_E]) AS [6 E], IIF(m.[6_GY]=0, NULL, m.[6_GY]) AS [6 GY], IIF(m.[7_E]=0, NULL, m.[7_E]) AS [7 E], IIF(m.[7_GY]=0, NULL, m.[7_GY]) AS [7 GY], IIF(m.[8_E]=0, NULL, m.[8_E]) AS [8 E], IIF(m.[8_GY]=0, NULL, m.[8_GY]) AS [8 GY], IIF(m.[9_E]=0, NULL, m.[9_E]) AS [9 E], IIF(m.[9_GY]=0, NULL, m.[9_GY]) AS [9 GY], IIF(m.[10_E]=0, NULL, m.[10_E]) AS [10 E], IIF(m.[10_GY]=0, NULL, m.[10_GY]) AS [10 GY], IIF(m.[11_E]=0, NULL, m.[11_E]) AS [11 E], IIF(m.[11_GY]=0, NULL, m.[11_GY]) AS [11 GY], IIF(m.[12_E]=0, NULL, m.[12_E]) AS [12 E], IIF(m.[12_GY]=0, NULL, m.[12_GY]) AS [12 GY], IIF(m.[13_E]=0, NULL, m.[13_E]) AS [13 E], IIF(m.[13_GY]=0, NULL, m.[13_GY]) AS [13 GY], IIF(m.[14_E]=0, NULL, m.[14_E]) AS [14 E], IIF(m.[14_GY]=0, NULL, m.[14_GY]) AS [14 GY], IIF(m.[15_E]=0, NULL, m.[15_E]) AS [15 E], IIF(m.[15_GY]=0, NULL, m.[15_GY]) AS [15 GY], IIF(m.[16_E]=0, NULL, m.[16_E]) AS [16 E], IIF(m.[16_GY]=0, NULL, m.[16_GY]) AS [16 GY], IIF(m.[17_E]=0, NULL, m.[17_E]) AS [17 E], IIF(m.[17_GY]=0, NULL, m.[17_GY]) AS [17 GY], IIF(m.[18_E]=0, NULL, m.[18_E]) AS [18 E], IIF(m.[18_GY]=0, NULL, m.[18_GY]) AS [18 GY], IIF(m.[19_E]=0, NULL, m.[19_E]) AS [19 E], IIF(m.[19_GY]=0, NULL, m.[19_GY]) AS [19 GY], IIF(m.[20_E]=0, NULL, m.[20_E]) AS [20 E], IIF(m.[20_GY]=0, NULL, m.[20_GY]) AS [20 GY], IIF(m.[21_E]=0, NULL, m.[21_E]) AS [21 E], IIF(m.[21_GY]=0, NULL, m.[21_GY]) AS [21 GY], IIF(m.[22_E]=0, NULL, m.[22_E]) AS [22 E], IIF(m.[22_GY]=0, NULL, m.[22_GY]) AS [22 GY], IIF(m.[23_E]=0, NULL, m.[23_E]) AS [23 E], IIF(m.[23_GY]=0, NULL, m.[23_GY]) AS [23 GY], IIF(m.[24_E]=0, NULL, m.[24_E]) AS [24 E], IIF(m.[24_GY]=0, NULL, m.[24_GY]) AS [24 GY], IIF(m.[25_E]=0, NULL, m.[25_E]) AS [25 E], IIF(m.[25_GY]=0, NULL, m.[25_GY]) AS [25 GY], IIF(m.[26_E]=0, NULL, m.[26_E]) AS [26 E], IIF(m.[26_GY]=0, NULL, m.[26_GY]) AS [26 GY], IIF(m.[27_E]=0, NULL, m.[27_E]) AS [27 E], IIF(m.[27_GY]=0, NULL, m.[27_GY]) AS [27 GY], IIF(m.[28_E]=0, NULL, m.[28_E]) AS [28 E], IIF(m.[28_GY]=0, NULL, m.[28_GY]) AS [28 GY], IIF(m.[29_E]=0, NULL, m.[29_E]) AS [29 E], IIF(m.[29_GY]=0, NULL, m.[29_GY]) AS [29 GY], IIF(m.[30_E]=0, NULL, m.[30_E]) AS [30 E], IIF(m.[30_GY]=0, NULL, m.[30_GY]) AS [30 GY], IIF(m.[31_E]=0, NULL, m.[31_E]) AS [31 E], IIF(m.[31_GY]=0, NULL, m.[31_GY]) AS [31 GY], (osszes_e.MULASZTASOKSZAMA + FLOOR(osszes_e_keses.MULASZTASOKSZAMA / 45)) AS COLUMN2672_E, (igazolt_e.IGAZOLTSZAMA + FLOOR(igazolt_e_keses.IGAZOLTSZAMA / 45)) AS COLUMN2568_E, ' + @colsHeader_E + ', (igazolatlan_e.IGAZOLATLANSZAMA + FLOOR(igazolatlan_e_keses.IGAZOLATLANSZAMA / 45)) AS COLUMN1911_E, (osszes_gy.MULASZTASOKSZAMA + FLOOR(osszes_gy_keses.MULASZTASOKSZAMA / 60)) AS COLUMN2672_GY, (igazolt_gy.IGAZOLTSZAMA + FLOOR(iigazolt_gy_keses.IGAZOLTSZAMA / 60)) AS COLUMN2568_GY, ' + @colsHeader_GY + ', (igazolatlan_gy.IGAZOLATLANSZAMA + FLOOR(igazolatlan_gy_keses.IGAZOLATLANSZAMA / 60)) AS COLUMN1911_GY FROM #tanulo AS tanulok LEFT JOIN ( SELECT * FROM ( SELECT * FROM #igazolas AS igazolasok WHERE Gyakorlati = ''F'' OR Gyakorlati IS NULL ) AS igazolasok PIVOT ( COUNT(IgazoltE) FOR IgazolasTipus IN (' + @cols_E + ')) AS PIVOTTABLE_E ) AS IGAZOLASTIPUSOKSZERINT_E ON IGAZOLASTIPUSOKSZERINT_E.Tanulo = tanulok.Id LEFT JOIN ( SELECT * FROM ( SELECT Tanulo, IgazoltE, -IgazolasTipus AS IgazolasTipus, Gyakorlati FROM #igazolas AS igazolasok WHERE Gyakorlati = ''T'' ) AS igazolasok PIVOT ( COUNT(IgazoltE) FOR IgazolasTipus IN (' + @cols_GY + ')) AS PIVOTTABLE_GY ) AS IGAZOLASTIPUSOKSZERINT_GY ON IGAZOLASTIPUSOKSZERINT_GY.Tanulo = tanulok.Id LEFT JOIN ( SELECT * FROM #mulasztas AS m PIVOT (COUNT(Osztaly) for Nap in ( [1_E],[2_E],[3_E],[4_E],[5_E],[6_E],[7_E],[8_E],[9_E],[10_E],[11_E],[12_E],[13_E],[14_E],[15_E],[16_E],[17_E],[18_E],[19_E],[20_E],[21_E],[22_E],[23_E],[24_E],[25_E],[26_E],[27_E],[28_E],[29_E],[30_E],[31_E], [1_GY],[2_GY],[3_GY],[4_GY],[5_GY],[6_GY],[7_GY],[8_GY],[9_GY],[10_GY],[11_GY],[12_GY],[13_GY],[14_GY],[15_GY],[16_GY],[17_GY],[18_GY],[19_GY],[20_GY],[21_GY],[22_GY],[23_GY],[24_GY],[25_GY],[26_GY],[27_GY],[28_GY],[29_GY],[30_GY],[31_GY] )) pv) m ON m.Tanulo = tanulok.id LEFT JOIN (SELECT Tanulo, COUNT(Tanulo) AS MULASZTASOKSZAMA FROM #igazolas WHERE (Gyakorlati = ''F'' OR Gyakorlati IS NULL) AND MulasztasTipus = 1500 GROUP BY Tanulo) AS Osszes_E ON Osszes_E.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, COUNT(Tanulo) AS IGAZOLTSZAMA FROM #igazolas i WHERE (Gyakorlati = ''F'' OR Gyakorlati IS NULL) AND i.IgazoltE=''T'' AND MulasztasTipus = 1500 GROUP BY Tanulo) AS Igazolt_E ON Igazolt_E.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, COUNT(Tanulo) AS IGAZOLATLANSZAMA FROM #igazolas i WHERE (Gyakorlati = ''F'' OR Gyakorlati IS NULL) AND i.IgazoltE=''F'' AND MulasztasTipus = 1500 GROUP BY Tanulo) AS Igazolatlan_E ON Igazolatlan_E.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, COUNT(Tanulo) AS MULASZTASOKSZAMA FROM #igazolas WHERE Gyakorlati = ''T'' AND MulasztasTipus = 1500 GROUP BY Tanulo) AS Osszes_Gy ON Osszes_Gy.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, COUNT(Tanulo) AS IGAZOLTSZAMA FROM #igazolas i WHERE Gyakorlati = ''T'' AND i.IgazoltE=''T'' AND MulasztasTipus = 1500 GROUP BY Tanulo) AS Igazolt_Gy ON Igazolt_Gy.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, COUNT(Tanulo) AS IGAZOLATLANSZAMA FROM #igazolas i WHERE Gyakorlati = ''T'' AND i.IgazoltE=''F'' AND MulasztasTipus = 1500 GROUP BY Tanulo) AS Igazolatlan_Gy ON Igazolatlan_Gy.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, SUM(KesesPerc) AS MULASZTASOKSZAMA FROM #igazolas WHERE (Gyakorlati = ''F'' OR Gyakorlati IS NULL) AND MulasztasTipus = 1499 GROUP BY Tanulo) AS Osszes_E_Keses ON Osszes_E_Keses.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, SUM(KesesPerc) AS IGAZOLTSZAMA FROM #igazolas i WHERE (Gyakorlati = ''F'' OR Gyakorlati IS NULL) AND i.IgazoltE=''T'' AND MulasztasTipus = 1499 GROUP BY Tanulo) AS Igazolt_E_Keses ON Igazolt_E_Keses.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, SUM(KesesPerc) AS IGAZOLATLANSZAMA FROM #igazolas i WHERE (Gyakorlati = ''F'' OR Gyakorlati IS NULL) AND i.IgazoltE=''F'' AND MulasztasTipus = 1499 GROUP BY Tanulo) AS Igazolatlan_E_Keses ON Igazolatlan_E_Keses.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, SUM(KesesPerc) AS MULASZTASOKSZAMA FROM #igazolas WHERE Gyakorlati = ''T'' AND MulasztasTipus = 1499 GROUP BY Tanulo) AS Osszes_Gy ON Osszes_Gy_Keses.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, SUM(KesesPerc) AS IGAZOLTSZAMA FROM #igazolas i WHERE Gyakorlati = ''T'' AND i.IgazoltE=''T'' AND MulasztasTipus = 1499 GROUP BY Tanulo) AS Igazolt_Gy_Keses ON Igazolt_Gy_Keses.Tanulo = tanulok.Id LEFT JOIN (SELECT Tanulo, SUM(KesesPerc) AS IGAZOLATLANSZAMA FROM #igazolas i WHERE Gyakorlati = ''T'' AND i.IgazoltE=''F'' AND MulasztasTipus = 1499 GROUP BY Tanulo) AS Igazolatlan_Gy_Keses ON Igazolatlan_Gy_Keses.Tanulo = tanulok.Id INNER JOIN T_FELHASZNALO_OSSZES f ON f.id = tanulok.Id ORDER BY f.c_nyomtatasinev'; execute(@query); END DROP TABLE #mulasztas DROP TABLE #tanulo DROP TABLE #igazolas DROP TABLE #igazolastipus END GO