SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF OBJECT_ID('sp_GetDokumentumErtekelesekIdoszakonkent') IS NOT NULL BEGIN DROP PROCEDURE sp_GetDokumentumErtekelesekIdoszakonkent END GO CREATE PROCEDURE sp_GetDokumentumErtekelesekIdoszakonkent @tanevId INT, @osztalyCsoportId INT, @ertekelesTipusa INT, @csakTanorai BIT, @csakKivlasztottOsztalyCsoport BIT, @atsoroltTanuloErtekelesek INT, @fuggolegesTantargyak BIT, @isMegjegyzesMegjelenjen BIT = 1 AS BEGIN SET NOCOUNT ON; /* a #students tábla deklarálása az alábbi tároltakban történik: sp_GetOsztalynaplo, sp_GetCsoportNaplo, sp_GetUzenofuzetErtekelolap*/ DECLARE @FelevVegeHonap INT, @FelevVegeNap INT SELECT @FelevVegeHonap = DATEPART(mm, C_DATUM) ,@FelevVegeNap = DATEPART(dd, C_DATUM) FROM T_TANEVRENDJE_OSSZES WHERE C_NAPTIPUSA = 1400 AND TOROLT = 'F' AND C_TANEVID = @tanevid SELECT Tipus ,Honap ,TanuloId ,TanuloCsoportId ,Ertekeles INTO #magatartasSzorgalomTMP FROM (SELECT 'Magatartás' Tipus ,IIF(DATEPART(mm, Datum) = @FelevVegeHonap, IIF(DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap, 13, 14), DATEPART(mm, Datum)) Honap ,TanuloId ,TanuloCsoportId ,ISNULL(MagatartasErtek, MagatartasOsztalyzatNev) + CASE WHEN TipusId = 1518 THEN '' WHEN TipusId = 1522 THEN '(I.)' WHEN TipusId = 1523 THEN '(III.)' WHEN TipusId = 1524 THEN '(II.)' WHEN TipusId = 1525 THEN '(IV.)' END AS Ertekeles FROM #ErtekelesekTemp WHERE (MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL) AND TipusId IN (1518, 1522, 1523, 1524, 1525) UNION ALL SELECT 'Szorgalom' ,IIF(DATEPART(mm, Datum) = @FelevVegeHonap, IIF(DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap, 13, 14), DATEPART(mm, Datum)) Honap ,TanuloId ,TanuloCsoportId ,ISNULL(SzorgalomErtek, SzorgalomOsztalyzatNev) + CASE WHEN TipusId = 1518 THEN '' WHEN TipusId = 1522 THEN '(I.)' WHEN TipusId = 1523 THEN '(III.)' WHEN TipusId = 1524 THEN '(II.)' WHEN TipusId = 1525 THEN '(IV.)' END AS Ertekeles FROM #ErtekelesekTemp WHERE (SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL) AND TipusId IN (1518, 1522, 1523, 1524, 1525) UNION ALL SELECT 'Szorgalom' ,15 Honap ,TanuloId ,TanuloCsoportId ,ISNULL(SzorgalomErtek, SzorgalomOsztalyzatNev) + Jeloles FROM #ErtekelesekTemp WHERE (SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL) AND TipusId = 1519 UNION ALL SELECT 'Magatartás' ,15 Honap ,TanuloId ,TanuloCsoportId ,ISNULL(MagatartasErtek, MagatartasOsztalyzatNev) + Jeloles FROM #ErtekelesekTemp WHERE (MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL) AND TipusId = 1519 UNION ALL SELECT 'Szorgalom' ,16 Honap ,TanuloId ,TanuloCsoportId ,ISNULL(SzorgalomErtek, SzorgalomOsztalyzatNev) + Jeloles FROM #ErtekelesekTemp WHERE (SzorgalomErtek IS NOT NULL OR SzorgalomOsztalyzatNev IS NOT NULL) AND TipusId = 1520 UNION ALL SELECT 'Magatartás' ,16 Honap ,TanuloId ,TanuloCsoportId ,ISNULL(MagatartasErtek, MagatartasOsztalyzatNev) + Jeloles FROM #ErtekelesekTemp WHERE (MagatartasErtek IS NOT NULL OR MagatartasOsztalyzatNev IS NOT NULL) AND TipusId = 1520 )magszorg SELECT DISTINCT Honap ,TanuloId ,TanuloCsoportId ,Tipus ,STUFF(( SELECT ', ' + CAST(Ertekeles AS nvarchar(max)) FROM #magatartasSzorgalomTMP bmsz WHERE msz.TanuloId = bmsz.TanuloId AND msz.Tipus = bmsz.Tipus AND msz.Honap = bmsz.Honap AND msz.TanuloCsoportId = bmsz.TanuloCsoportId FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2,'') Ertekeles ,IIF(Tipus = 'Magatartás', 0, 1) Rendez , CASE WHEN Honap = 2 THEN 8 WHEN Honap = 3 THEN 9 WHEN Honap = 4 THEN 10 WHEN Honap = 5 THEN 11 WHEN Honap = 6 THEN 12 WHEN Honap = 9 THEN 1 WHEN Honap = 10 THEN 2 WHEN Honap = 11 THEN 3 WHEN Honap = 12 THEN 4 WHEN Honap = 13 THEN 5 WHEN Honap = 14 THEN 7 WHEN Honap = 15 THEN 6 WHEN Honap = 16 THEN 15 END AS RendezHonap INTO #magatartasSzorgalom FROM #magatartasSzorgalomTMP msz CREATE CLUSTERED INDEX ci111sss on #magatartasSzorgalomTMP (tanulocsoportid) SELECT Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,Ertekeles ,Rendez INTO #jegyekTMP FROM (SELECT IIF(DATEPART(mm, Datum) = @FelevVegeHonap, IIF(DATEPART(mm, Datum) = @FelevVegeHonap AND DATEPART(DD, Datum) <= @FelevVegeNap, 13, 14), DATEPART(mm, Datum)) Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + CASE WHEN TipusId = 1518 THEN '' WHEN TipusId = 1522 THEN '(I.)' WHEN TipusId = 1523 THEN '(III.)' WHEN TipusId = 1524 THEN '(II.)' WHEN TipusId = 1525 THEN '(IV.)' WHEN TipusId = 1521 THEN '(mz)' WHEN TipusId = 1526 THEN '(pv)' WHEN TipusId = 1527 THEN '(ov)' WHEN TipusId = 1528 THEN '(kv)' WHEN TipusId = 6916 THEN '(pótló v.)' WHEN TipusId = 6917 THEN '(jv)' WHEN TipusId = 6918 THEN '(bv)' END AS Ertekeles ,TargyKategoriaId Rendez FROM #ErtekelesekTemp WHERE isMagatartasSzorgalom = 'F' AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL) AND TipusId IN (1518, 1522, 1523, 1524, 1525, 1521, 1526, 1527, 1528, 6916, 6917, 6918) UNION ALL SELECT 15 Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + IIF(@isMegjegyzesMegjelenjen = 1, Jeloles, '') ,TargyKategoriaId Rendez FROM #ErtekelesekTemp WHERE isMagatartasSzorgalom = 'F' AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL) AND TipusId = 1519 UNION ALL SELECT 16 Honap ,TanuloId ,TanuloCsoportId ,TantargyId ,ISNULL(CONVERT(NVARCHAR(MAX),ErtekelesOsztalyzatValue), ErtekelesSzazalek) + IIF(@isMegjegyzesMegjelenjen = 1, Jeloles, '') ,TargyKategoriaId Rendez FROM #ErtekelesekTemp WHERE isMagatartasSzorgalom = 'F' AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL) AND TipusId = 1520 )jegyek CREATE CLUSTERED INDEX ci111ssws on #jegyekTMP (tanulocsoportid) SELECT ID ,Honap ,TanuloCsoportId INTO #TanuloIdHonap FROM #studentsWithTanuloCsoport CROSS JOIN (VALUES (2),(3),(4),(5),(6),(9),(10),(11),(12),(13),(14),(15),(16)) Honap (Honap) SELECT DISTINCT TanuloIdHonap.Honap ,TanuloIdHonap.Id TanuloId ,TanuloIdHonap.TanuloCsoportId ,TantargyId ,STUFF(( SELECT ', ' + CAST(Ertekeles AS nvarchar(max)) FROM #jegyekTMP bjegyekTMP WHERE jegyekTMP.TanuloId = bjegyekTMP.TanuloId AND jegyekTMP.TanuloCsoportId = bjegyekTMP.TanuloCsoportId AND jegyekTMP.TantargyId = bjegyekTMP.TantargyId AND jegyekTMP.Honap = bjegyekTMP.Honap FOR XML PATH(''), TYPE).value('.', 'nvarchar(max)'), 1, 2,'') Ertekeles ,Rendez , CASE WHEN TanuloIdHonap.Honap = 2 THEN 8 WHEN TanuloIdHonap.Honap = 3 THEN 9 WHEN TanuloIdHonap.Honap = 4 THEN 10 WHEN TanuloIdHonap.Honap = 5 THEN 11 WHEN TanuloIdHonap.Honap = 6 THEN 12 WHEN TanuloIdHonap.Honap = 9 THEN 1 WHEN TanuloIdHonap.Honap = 10 THEN 2 WHEN TanuloIdHonap.Honap = 11 THEN 3 WHEN TanuloIdHonap.Honap = 12 THEN 4 WHEN TanuloIdHonap.Honap = 13 THEN 5 WHEN TanuloIdHonap.Honap = 14 THEN 7 WHEN TanuloIdHonap.Honap = 15 THEN 6 WHEN TanuloIdHonap.Honap = 16 THEN 15 END AS RendezHonap INTO #jegyek FROM #TanuloIdHonap TanuloIdHonap LEFT JOIN #jegyekTMP jegyekTMP ON TanuloIdHonap.ID = jegyekTMP.TanuloId AND TanuloIdHonap.Honap = jegyekTMP.Honap AND TanuloIdHonap.TanuloCsoportId = jegyekTMP.TanuloCsoportId IF @fuggolegesTantargyak = 1 BEGIN DECLARE @tantargyakJegyek NVARCHAR(MAX) DECLARE @tantargyakNevvelJegyek NVARCHAR(MAX) SELECT @tantargyakNevvelJegyek = ISNULL(@tantargyakNevvelJegyek + ', ', '') + '[' + CAST(t.TantargyId AS NVARCHAR(MAX)) + '] AS [' + t.TantargyNev + ']', @tantargyakJegyek = ISNULL(@tantargyakJegyek + ', ', '[0], [1],') + '[' + CAST(t.TantargyId AS NVARCHAR(MAX)) + ']' FROM (SELECT DISTINCT TantargyId, IIF(LEN(t.c_nev) > 128, SUBSTRING(t.c_nev,1,120) + '...', t.c_nev) AS TantargyNev, C_TARGYKATEGORIA FROM #jegyek j INNER JOIN T_TANTARGY_OSSZES t ON t.Id = j.TantargyId ) t ORDER BY C_TARGYKATEGORIA DECLARE @sqlJegyek NVARCHAR(MAX) SET @sqlJegyek = ' SELECT TanuloId tanuloID ,TanuloCsoportId ,CASE WHEN Honap = 2 THEN ''02.'' WHEN Honap = 3 THEN ''03.'' WHEN Honap = 4 THEN ''04.'' WHEN Honap = 5 THEN ''05.'' WHEN Honap = 6 THEN ''06.'' WHEN Honap = 9 THEN ''09.'' WHEN Honap = 10 THEN ''10.'' WHEN Honap = 11 THEN ''11.'' WHEN Honap = 12 THEN ''12.'' WHEN Honap = 13 THEN ''1/I.'' WHEN Honap = 14 THEN ''1/II.'' WHEN Honap = 15 THEN ''F'' WHEN Honap = 16 THEN ''É'' END AS periodusNev ,piv.[0] AS Magatartás ,piv.[1] AS Szorgalom ,' + @tantargyakNevvelJegyek + ' FROM ( SELECT TantargyId ,Honap ,s.ID TanuloId ,s.TanuloCsoportId ,Ertekeles ,RendezHonap FROM #jegyek j INNER JOIN #studentsWithTanuloCsoport s on j.Tanuloid = s.ID AND s.TanuloCsoportId = j.TanuloCsoportId UNION ALL SELECT IIF(Tipus = ''Magatartás'', 0, 1) ,Honap ,s.ID ,s.TanuloCsoportId ,Ertekeles ,RendezHonap FROM #magatartasSzorgalom m INNER JOIN #studentsWithTanuloCsoport s on m.Tanuloid = s.ID AND s.TanuloCsoportId = m.TanuloCsoportId )a PIVOT (MAX(Ertekeles) FOR TantargyId in (' + @tantargyakJegyek + ')) piv ORDER BY RendezHonap ' IF (@tantargyakJegyek IS NULL) BEGIN SELECT 0 AS tanuloId, 0 as TanuloCsoportId END ELSE BEGIN EXEC sp_executesql @sqlJegyek END END ELSE BEGIN SELECT * FROM( SELECT TanuloId ,TanuloCsoportId , Tipus , Rendez ,[9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16] FROM (SELECT TanuloId, TanuloCsoportId, Ertekeles, Honap, Tipus, IIF(Tipus = 'Magatartás', 0, 1) TantargyId, Rendez FROM #magatartasSzorgalom)a PIVOT (MAX(Ertekeles) FOR Honap IN ([9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16])) piv UNION ALL SELECT TanuloId TanuloId ,TanuloCsoportId ,C_NEV TantargyNev ,Rendez ,[9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16] FROM (SELECT TanuloId, TanuloCsoportId, Ertekeles, Honap, TantargyId, Rendez FROM #jegyek) j INNER JOIN (SELECT Id, C_NEV FROM T_TANTARGY_OSSZES) t ON t.Id = TantargyId PIVOT (MAX(Ertekeles) FOR Honap IN ([9],[10],[11],[12],[2],[3],[4],[5],[6],[13],[14],[15],[16])) piv )vegleges ORDER BY TanuloId, Rendez, Tipus END END GO