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)' ELSE ' ' + LOWER(SUBSTRING(C_NAME, 0, 3)) END AS Ertekeles ,TargyKategoriaId Rendez FROM #ErtekelesekTemp ertekeles LEFT JOIN T_DICTIONARYITEMBASE_OSSZES ertekesMod ON ertekeles.TipusId = ertekesMod.ID AND TOROLT = 'F' AND ertekesMod.C_TANEVID = @tanevId WHERE isMagatartasSzorgalom = 'F' AND (ErtekelesOsztalyzatValue IS NOT NULL OR ErtekelesSzazalek IS NOT NULL) AND TipusId NOT IN (1519, 1520) 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