SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO IF OBJECT_ID('[dbo].[sp_GenerateErtekelesekTempTablaByTanulo]') IS NOT NULL BEGIN DROP PROCEDURE [dbo].[sp_GenerateErtekelesekTempTablaByTanulo] END GO -- ============================================= -- Description: -- NOTE: EZT A HÁROM TÁROLT ELJÁRÁST EGYBEN KELL KEZELNI, HA MÓDOSÍTJUK!!! -- - sp_GenerateErtekelesekTempTabla -- - sp_GenerateErtekelesekMagatartasSzorgalomTempTabla -- - sp_GenerateErtekelesekTempTablaByTanulo -- ============================================= CREATE PROCEDURE [dbo].[sp_GenerateErtekelesekTempTablaByTanulo] @pTanuloId INT ,@pFotargyAltargyId INT = NULL ,@pFelevVegeDatum DATE ,@pErtekelesTipusEvkozi INT ,@pErtekelesTipusFelevi INT ,@pErtekelesTipusEvvegi INT AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from interfering with SELECT statements. SET NOCOUNT ON; DECLARE @TempDictionaryItem TABLE ( ID INT PRIMARY KEY ,C_VALUE INT ,C_ORDER INT ,C_INTEZMENYID INT ,C_TANEVID INT ) INSERT INTO @TempDictionaryItem SELECT ID ,C_VALUE ,C_ORDER ,C_INTEZMENYID ,C_TANEVID FROM T_DICTIONARYITEMBASE WHERE C_TYPE IN ('OsztalyzatTipus', 'MagatartasErtekelesTipus', 'SzorgalomErtekelesTipus', 'TargyKategoriaTipus') AND TOROLT = 'F' DECLARE @OsztalyCsoportIdList TABLE ( ID INT PRIMARY KEY ) INSERT INTO @OsztalyCsoportIdList (ID) SELECT C_OSZTALYCSOPORTID ID FROM T_TANULOCSOPORT WHERE C_BELEPESDATUM <= GETDATE() AND (C_KILEPESDATUM IS NULL OR C_KILEPESDATUM >= GETDATE()) AND TOROLT = 'F' AND C_TANULOID = @pTanuloId DECLARE @Tantargyak TABLE ( ID INT PRIMARY KEY ,C_FOTARGYID INT ,C_NEV NVARCHAR(255) ,C_TARGYKATEGORIA INT ); WITH tantargy_CTE (C_TANTARGYID, C_FOTARGYID) AS ( SELECT foglalkozas.C_TANTARGYID, tantargy.C_FOTARGYID FROM T_FOGLALKOZAS foglalkozas INNER JOIN T_TANTARGY tantargy ON tantargy.ID = foglalkozas.C_TANTARGYID WHERE foglalkozas.C_OSZTALYCSOPORTID IN (SELECT ID FROM @OsztalyCsoportIdList) AND foglalkozas.TOROLT = 'F' UNION SELECT orarendiOra.C_TANTARGYID, tantargy.C_FOTARGYID FROM T_ORARENDIORA orarendiOra INNER JOIN T_TANTARGY tantargy ON tantargy.ID = orarendiOra.C_TANTARGYID WHERE orarendiOra.C_OSZTALYCSOPORTID IN (SELECT ID FROM @OsztalyCsoportIdList) AND orarendiOra.TOROLT = 'F' UNION SELECT tanuloErtekeles.C_TANTARGYID, tantargy.C_FOTARGYID FROM T_TANULOERTEKELES tanuloErtekeles INNER JOIN T_TANTARGY tantargy ON tantargy.ID = tanuloErtekeles.C_TANTARGYID LEFT JOIN T_OSZTALYCSOPORT Osztaly ON Osztaly.ID = tanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID AND Osztaly.TOROLT = 'F' AND Osztaly.C_EVFOLYAMTIPUSA = (SELECT EvfolyamTipusId FROM dbo.fnGetTanuloOsztaly(tanuloErtekeles.C_TANULOID)) WHERE tanuloErtekeles.C_TANULOID = @pTanuloId AND tanuloErtekeles.C_TANTARGYID IS NOT NULL AND tanuloErtekeles.TOROLT = 'F' ) INSERT INTO @Tantargyak (ID, C_FOTARGYID, C_NEV, C_TARGYKATEGORIA) SELECT DISTINCT kapcsopodoTantargy.ID, kapcsopodoTantargy.C_FOTARGYID, kapcsopodoTantargy.C_NEV, kapcsopodoTantargy.C_TARGYKATEGORIA FROM tantargy_CTE INNER JOIN fnGetKapcsolodoTantargyak(@pFotargyAltargyId) kapcsopodoTantargy ON tantargy_CTE.C_TANTARGYID = kapcsopodoTantargy.ID OR tantargy_CTE.C_FOTARGYID = kapcsopodoTantargy.ID WHERE (kapcsopodoTantargy.ID <> @pFotargyAltargyId OR @pFotargyAltargyId IS NULL) DECLARE @TempTanuloErtekeles TABLE ( ID INT ,Datum NVARCHAR(255) ,TipusId INT ,TanuloId INT ,TantargyId INT ,TantargyNev NVARCHAR(255) ,TantargyKategoria INT ,FotargyId INT ,Honap NVARCHAR(2) ,ErtekelesOsztalyzat INT ,ErtekelesSzoveg NVARCHAR(MAX) ,ErtekelesSzovegRovidNev NVARCHAR(3) ,ErtekelesSzazalek INT ,MagatartasOsztalyzat INT ,MagatartasSzoveg NVARCHAR(MAX) ,MagatartasSzovegRovidNev NVARCHAR(3) ,MagatartasErtek INT ,SzorgalomOsztalyzat INT ,SzorgalomSzoveg NVARCHAR(MAX) ,SzorgalomSzovegRovidNev NVARCHAR(3) ,SzorgalomErtek INT ,Suly INT ) INSERT INTO @TempTanuloErtekeles ( ID ,Datum ,TipusId ,TanuloId ,TantargyId ,TantargyNev ,TantargyKategoria ,FotargyId ,Honap ,ErtekelesOsztalyzat ,ErtekelesSzoveg ,ErtekelesSzovegRovidNev ,ErtekelesSzazalek ,MagatartasOsztalyzat ,MagatartasSzoveg ,MagatartasSzovegRovidNev ,MagatartasErtek ,SzorgalomOsztalyzat ,SzorgalomSzoveg ,SzorgalomSzovegRovidNev ,SzorgalomErtek ,Suly ) SELECT DISTINCT * FROM ( SELECT DISTINCT tanuloErtekeles.ID ID ,tanuloErtekeles.C_DATUM Datum ,tanuloErtekeles.C_TIPUSID TipusId ,@pTanuloId TanuloId ,tantargy.ID TantargyId ,tantargy.C_NEV TantargyNev ,tantargyKategoria.C_ORDER TantargyKategoria ,tantargy.C_FOTARGYID FotargyId ,CASE WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusFelevi THEN 'I' WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusEvvegi THEN 'II' ELSE CASE WHEN CAST(tanuloErtekeles.C_DATUM AS DATE) > @pFelevVegeDatum THEN CAST(MONTH(tanuloErtekeles.C_DATUM) + 1 AS NVARCHAR(2)) ELSE CAST(MONTH(tanuloErtekeles.C_DATUM) AS NVARCHAR(2)) END END Honap ,ertekelesOsztalyzat.C_VALUE ErtekelesOsztalyzat ,tanuloErtekeles.C_ERTEKELESSZOVEG ErtekelesSzoveg ,tanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV ErtekelesSzovegRovidNev ,tanuloErtekeles.C_ERTEKELESSZAZALEK ErtekelesSzazalek ,NULL MagatartasOsztalyzat ,NULL MagatartasSzoveg ,NULL MagatartasSzovegRovidNev ,NULL MagatartasErtek ,NULL SzorgalomOsztalyzat ,NULL SzorgalomSzoveg ,NULL SzorgalomSzovegRovidNev ,NULL SzorgalomErtek ,tanariAtlagSuly.C_SULY Suly FROM @Tantargyak AS tantargy LEFT JOIN ( SELECT TanuloErtekeles.ID ,TanuloErtekeles.C_DATUM ,TanuloErtekeles.C_TIPUSID ,TanuloErtekeles.C_TANULOID ,TanuloErtekeles.C_TANTARGYID ,TanuloErtekeles.C_OSZTALYCSOPORTID ,TanuloErtekeles.C_ERTEKELESOSZTALYZATID ,TanuloErtekeles.C_ERTEKELESSZOVEG ,TanuloErtekeles.C_ERTEKELESSZOVEGROVIDNEV ,TanuloErtekeles.C_ERTEKELESSZAZALEK ,TanuloErtekeles.C_ERTEKELESMODID FROM T_TANULOERTEKELES TanuloErtekeles INNER JOIN T_OSZTALYCSOPORT Osztaly ON Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID AND Osztaly.TOROLT = 'F' AND Osztaly.C_EVFOLYAMTIPUSA = (SELECT EvfolyamTipusId FROM dbo.fnGetTanuloOsztaly(TanuloErtekeles.C_TANULOID)) WHERE TanuloErtekeles.TOROLT = 'F' AND TanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'F' ) AS tanuloErtekeles ON tanuloErtekeles.C_TANULOID = @pTanuloId AND tanuloErtekeles.C_TANTARGYID = tantargy.ID LEFT JOIN @TempDictionaryItem AS ertekelesOsztalyzat ON ertekelesOsztalyzat.ID = tanuloErtekeles.C_ERTEKELESOSZTALYZATID LEFT JOIN @TempDictionaryItem AS tantargyKategoria ON tantargyKategoria.ID = tantargy.C_TARGYKATEGORIA LEFT JOIN T_TANARIATLAGSULY tanariAtlagSuly ON tanariAtlagSuly.C_ERTEKELESMODID = tanuloErtekeles.C_ERTEKELESMODID AND tanuloErtekeles.C_ERTEKELESOSZTALYZATID IS NOT NULL AND tanariAtlagSuly.TOROLT = 'F' ) AS temp IF @pFotargyAltargyId IS NULL BEGIN DECLARE @MagatartasSzorgalom TABLE ( C_NEV NVARCHAR(255) ); INSERT INTO @MagatartasSzorgalom (C_NEV) SELECT 'Magatartás/Szorgalom' INSERT INTO @TempTanuloErtekeles ( ID ,Datum ,TipusId ,TanuloId ,TantargyId ,TantargyNev ,TantargyKategoria ,FotargyId ,Honap ,ErtekelesOsztalyzat ,ErtekelesSzoveg ,ErtekelesSzovegRovidNev ,ErtekelesSzazalek ,MagatartasOsztalyzat ,MagatartasSzoveg ,MagatartasSzovegRovidNev ,MagatartasErtek ,SzorgalomOsztalyzat ,SzorgalomSzoveg ,SzorgalomSzovegRovidNev ,SzorgalomErtek ,Suly ) SELECT DISTINCT tanuloErtekeles.ID ID ,tanuloErtekeles.C_DATUM Datum ,tanuloErtekeles.C_TIPUSID TipusId ,@pTanuloId TanuloId ,0 TantargyId ,magatartasSzorgalom.C_NEV TantargyNev ,0 TantargyKategoria ,NULL FotargyId ,CASE WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusFelevi THEN 'I' WHEN tanuloErtekeles.C_TIPUSID = @pErtekelesTipusEvvegi THEN 'II' ELSE CASE WHEN CAST(tanuloErtekeles.C_DATUM AS DATE) > @pFelevVegeDatum THEN CAST(MONTH(tanuloErtekeles.C_DATUM) + 1 AS NVARCHAR(2)) ELSE CAST(MONTH(tanuloErtekeles.C_DATUM) AS NVARCHAR(2)) END END Honap ,NULL ErtekelesOsztalyzat ,NULL ErtekelesSzoveg ,NULL ErtekelesSzovegRovidNev ,NULL ErtekelesSzazalek ,magatartasOsztalyzat.C_VALUE MagatartasOsztalyzat ,tanuloErtekeles.C_MAGATARTASSZOVEG MagatartasSzoveg ,tanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV MagatartasSzovegRovidNev ,magatartasErtek.C_VALUE MagatartasErtek ,szorgalomOsztalyzat.C_VALUE SzorgalomOsztalyzat ,tanuloErtekeles.C_SZORGALOMSZOVEG SzorgalomSzoveg ,tanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV SzorgalomSzovegRovidNev ,szorgalomErtek.C_VALUE SzorgalomErtek ,100 Suly FROM @MagatartasSzorgalom magatartasSzorgalom LEFT JOIN ( SELECT TanuloErtekeles.ID ,TanuloErtekeles.C_DATUM ,TanuloErtekeles.C_TIPUSID ,TanuloErtekeles.C_TANULOID ,TanuloErtekeles.C_OSZTALYCSOPORTID ,TanuloErtekeles.C_TANTARGYID ,TanuloErtekeles.C_MAGATARTASOSZTALYZATID ,TanuloErtekeles.C_MAGATARTASSZOVEG ,TanuloErtekeles.C_MAGATARTASSZOVEGROVIDNEV ,TanuloErtekeles.C_MAGATARTASERTEKID ,TanuloErtekeles.C_SZORGALOMOSZTALYZATID ,TanuloErtekeles.C_SZORGALOMSZOVEG ,TanuloErtekeles.C_SZORGALOMSZOVEGROVIDNEV ,TanuloErtekeles.C_SZORGALOMERTEKID FROM T_TANULOERTEKELES TanuloErtekeles INNER JOIN T_OSZTALYCSOPORT Osztaly ON Osztaly.ID = TanuloErtekeles.C_ROGZITESKORITANULOOSZTALYID AND Osztaly.TOROLT = 'F' AND Osztaly.C_EVFOLYAMTIPUSA = (SELECT EvfolyamTipusId FROM dbo.fnGetTanuloOsztaly(TanuloErtekeles.C_TANULOID)) WHERE TanuloErtekeles.TOROLT = 'F' AND TanuloErtekeles.C_ISMAGATARTASSZORGALOM = 'T' ) AS tanuloErtekeles ON tanuloErtekeles.C_TANULOID = @pTanuloId AND tanuloErtekeles.C_TANTARGYID IS NULL LEFT JOIN @TempDictionaryItem AS magatartasOsztalyzat ON magatartasOsztalyzat.ID = tanuloErtekeles.C_MAGATARTASOSZTALYZATID LEFT JOIN @TempDictionaryItem AS szorgalomOsztalyzat ON szorgalomOsztalyzat.ID = tanuloErtekeles.C_SZORGALOMOSZTALYZATID LEFT JOIN @TempDictionaryItem AS magatartasErtek ON magatartasErtek.ID = tanuloErtekeles.C_MAGATARTASERTEKID LEFT JOIN @TempDictionaryItem AS szorgalomErtek ON szorgalomErtek.ID = tanuloErtekeles.C_SZORGALOMERTEKID END SELECT result.ID ,result.TantargyId ,TantargyNev ,TantargyKategoria ,FotargyId ,TanuloId ,[09] ,[10] ,[11] ,[12] ,[01I] ,[01II] ,[02] ,[03] ,[04] ,[05] ,[06] ,[I] ,[II] ,Atlag FROM ( SELECT pivotErtekelesek.TantargyId ID ,pivotErtekelesek.TantargyId TantargyId ,TantargyNev TantargyNev ,pivotErtekelesek.TantargyKategoria TantargyKategoria ,pivotErtekelesek.FotargyId FotargyId ,pivotErtekelesek.TanuloId TanuloId ,[9] [09] ,[10] [10] ,[11] [11] ,[12] [12] ,[1] [01I] ,[2] [01II] ,[3] [02] ,[4] [03] ,[5] [04] ,[6] [05] ,[7] [06] ,[I] [I] ,[II] [II] ,atlag.Jegy Atlag FROM ( SELECT DISTINCT tempErtekeles1.TantargyId ,tempErtekeles1.TantargyNev ,tempErtekeles1.TantargyKategoria ,tempErtekeles1.FotargyId ,tempErtekeles1.TanuloId ,tempErtekeles1.Honap ,STUFF ( (SELECT ',' + ISNULL(CAST(tempErtekeles2.ErtekelesOsztalyzat AS VARCHAR(1)), '') + ISNULL(CAST( CASE WHEN tempErtekeles2.ErtekelesSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.ErtekelesSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = '' THEN NULL ELSE ISNULL(tempErtekeles2.ErtekelesSzovegRovidNev, 'sz') END AS VARCHAR(3)), '') + ISNULL(CAST(tempErtekeles2.ErtekelesSzazalek AS VARCHAR(3)), '') + ISNULL(CAST(tempErtekeles2.MagatartasOsztalyzat AS VARCHAR(1)), '') + ',' + ISNULL(CAST(tempErtekeles2.SzorgalomOsztalyzat AS VARCHAR(1)), '') + ISNULL(CAST( CASE WHEN tempErtekeles2.MagatartasSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.MagatartasSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = '' THEN NULL ELSE ISNULL(tempErtekeles2.MagatartasSzovegRovidNev, 'sz') END AS VARCHAR(3)), '') + ',' + ISNULL(CAST( CASE WHEN tempErtekeles2.SzorgalomSzoveg IS NULL OR LTRIM(RTRIM(REPLACE(REPLACE(REPLACE(tempErtekeles2.SzorgalomSzoveg, CHAR(9), ''), CHAR(10), ''), CHAR(13), ''))) = '' THEN NULL ELSE ISNULL(tempErtekeles2.SzorgalomSzovegRovidNev, 'sz') END AS VARCHAR(3)), '') + ISNULL(CAST(tempErtekeles2.MagatartasErtek AS VARCHAR(1)), '') + ',' + ISNULL(CAST(tempErtekeles2.SzorgalomErtek AS VARCHAR(1)), '') FROM @TempTanuloErtekeles tempErtekeles2 WHERE tempErtekeles1.TantargyId = tempErtekeles2.TantargyId AND tempErtekeles1.Honap = tempErtekeles2.Honap FOR XML PATH ('') ), 1, 1, '' ) TanuloErtekelesList FROM @TempTanuloErtekeles tempErtekeles1 ) AS erdemjegyek PIVOT ( MAX(TanuloErtekelesList) FOR Honap IN ([I], [II], [9] ,[10] ,[11] ,[12] ,[1] ,[2] ,[3] ,[4] ,[5] ,[6], [7]) ) AS pivotErtekelesek LEFT JOIN ( SELECT TantargyId TantargyId ,ROUND ( SUM(CAST(ErtekelesOsztalyzat AS FLOAT) * CAST(ISNULL(Suly, 100) AS FLOAT) / 100) / SUM(CAST(ISNULL(Suly, 100) AS FLOAT) / 100), 2 ) Jegy FROM @TempTanuloErtekeles WHERE TipusId = @pErtekelesTipusEvkozi AND ErtekelesOsztalyzat IS NOT NULL GROUP BY TantargyId ) AS atlag ON pivotErtekelesek.TantargyId = atlag.TantargyId ) AS result LEFT JOIN T_TANTARGY fotargy ON result.FotargyId = fotargy.ID LEFT JOIN @TempDictionaryItem targykategoria ON targykategoria.ID = fotargy.C_TARGYKATEGORIA AND targykategoria.C_INTEZMENYID = fotargy.C_INTEZMENYID AND targykategoria.C_TANEVID = fotargy.C_TANEVID ORDER BY CASE WHEN result.FotargyId IS NULL THEN ISNULL(result.TantargyKategoria, 10000) ELSE ISNULL(targykategoria.C_ORDER, 10000) END ,ISNULL(fotargy.C_NEV, result.TantargyNev) ,ISNULL(result.FotargyId, result.TantargyId) ,result.FotargyId ,result.TantargyNev END GO