194 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			7.3 KiB
		
	
	
	
		
			Transact-SQL
		
	
	
	
	
	
DROP PROCEDURE IF EXISTS [uspGetDolgozatErtekelesAtlag]
 | 
						|
GO
 | 
						|
 | 
						|
CREATE PROCEDURE [uspGetDolgozatErtekelesAtlag]
 | 
						|
   @pIntezmenyId int
 | 
						|
  ,@pTanevId int
 | 
						|
  ,@pOsztalyCsoportId int
 | 
						|
  ,@pTantargyId int
 | 
						|
  ,@pErtekelesModIdString nvarchar(300)
 | 
						|
  ,@pTanarId int
 | 
						|
  ,@pErtekelesTema nvarchar(255)
 | 
						|
  ,@pAtlagTol float
 | 
						|
  ,@pAtlagIg float
 | 
						|
  ,@pErdemjegy5Tol int
 | 
						|
  ,@pErdemjegy5Ig int
 | 
						|
  ,@pErdemjegy4Tol int
 | 
						|
  ,@pErdemjegy4Ig int
 | 
						|
  ,@pErdemjegy3Tol int
 | 
						|
  ,@pErdemjegy3Ig int
 | 
						|
  ,@pErdemjegy2Tol int
 | 
						|
  ,@pErdemjegy2Ig int
 | 
						|
  ,@pErdemjegy1Tol int
 | 
						|
  ,@pErdemjegy1Ig int
 | 
						|
  ,@pNemIrtDolgozatotTol int
 | 
						|
  ,@pNemIrtDolgozatotIg int
 | 
						|
  ,@pSzuperOsztalyfonok int
 | 
						|
  ,@pDatum	datetime
 | 
						|
 | 
						|
AS BEGIN
 | 
						|
  SET NOCOUNT ON;
 | 
						|
  DECLARE @preSql NVARCHAR(MAX), @mainSql NVARCHAR(MAX), @sql NVARCHAR(MAX)
 | 
						|
  SET @pErtekelesTema = REPLACE(@pErtekelesTema, ' ', '')
 | 
						|
 | 
						|
  SET @preSql = IIF(@pSzuperOsztalyfonok = 1, N'', N'
 | 
						|
  CREATE TABLE #OsztalyCsoportokTantargyak (
 | 
						|
      OsztalyCsoportId INT
 | 
						|
     ,OsztalyCsoportNev nvarchar(255)
 | 
						|
     ,TantargyId INT
 | 
						|
     ,PRIMARY KEY(OsztalyCsoportId,TantargyId)
 | 
						|
  )
 | 
						|
 | 
						|
  INSERT INTO #OsztalyCsoportokTantargyak (
 | 
						|
     OsztalyCsoportId
 | 
						|
    ,OsztalyCsoportNev
 | 
						|
    ,TantargyId
 | 
						|
  )
 | 
						|
  EXEC uspGetTanarAltalErtekelhetoCsoportokTantargyak 
 | 
						|
     @pTanarId
 | 
						|
    ,@pTanevId
 | 
						|
    ,@pDatum
 | 
						|
  ')
 | 
						|
 | 
						|
  SET @mainSql = N'
 | 
						|
  SELECT
 | 
						|
     sub.Datum
 | 
						|
    ,sub.OsztalyCsoport
 | 
						|
    ,sub.OsztalyCsoportId
 | 
						|
    ,sub.ErtekelesTema
 | 
						|
    ,tgy.C_NEV AS TantargyNev
 | 
						|
    ,sub.TantargyId
 | 
						|
    ,sub.ErtekelesModId
 | 
						|
    ,sub.Erdemjegy1
 | 
						|
    ,sub.Erdemjegy2
 | 
						|
    ,sub.Erdemjegy3
 | 
						|
    ,sub.Erdemjegy4
 | 
						|
    ,sub.Erdemjegy5
 | 
						|
    ,sub.Cnt IrtakDolgozatot
 | 
						|
    ,(letszam.Letszam - sub.Cnt) NemIrtakDolgozatot
 | 
						|
    ,CONVERT(nvarchar(255), sub.Cnt) + ''/'' + CONVERT(nvarchar(255), letszam.Letszam) AS IrtakDolgozatotArany
 | 
						|
    ,ROUND(Total / CAST(Cnt AS Float), 2) AS Atlag
 | 
						|
    ,letszam.Letszam
 | 
						|
  FROM (
 | 
						|
    SELECT 
 | 
						|
       s.C_DATUM AS Datum
 | 
						|
      ,s.OsztalyCsoportNev AS OsztalyCsoport
 | 
						|
	    ,s.C_OSZTALYCSOPORTID AS OsztalyCsoportId
 | 
						|
	    ,s.C_ERTEKELESTEMA AS ErtekelesTema
 | 
						|
	    ,s.C_TANTARGYID AS TantargyId
 | 
						|
      ,s.C_ERTEKELESMODID AS ErtekelesModId
 | 
						|
      ,s.[1501] AS Erdemjegy1
 | 
						|
      ,s.[1502] AS Erdemjegy2
 | 
						|
      ,s.[1503] AS Erdemjegy3
 | 
						|
      ,s.[1504] AS Erdemjegy4
 | 
						|
      ,s.[1505] AS Erdemjegy5
 | 
						|
      ,s.[1501] + s.[1502] + s.[1503] + s.[1504] + s.[1505] AS Cnt
 | 
						|
      ,s.[1501] + s.[1502] * 2 + s.[1503] * 3 + s.[1504] * 4 + s.[1505] * 5 AS Total
 | 
						|
    FROM (
 | 
						|
      SELECT
 | 
						|
         er.C_DATUM
 | 
						|
		    ,er.C_OSZTALYCSOPORTID
 | 
						|
		    ,er.C_ERTEKELESTEMA
 | 
						|
		    ,er.C_TANTARGYID
 | 
						|
		    ,er.C_ERTEKELESOSZTALYZATID 
 | 
						|
        ,er.C_ERTEKELESMODID
 | 
						|
        ,ocs.C_NEV AS OsztalyCsoportNev
 | 
						|
      FROM T_TANULOERTEKELES_OSSZES er
 | 
						|
        INNER JOIN T_OSZTALYCSOPORT_OSSZES ocs ON ocs.ID = er.C_OSZTALYCSOPORTID AND ocs.TOROLT=''F'' AND ocs.C_TANEVID = er.C_TANEVID
 | 
						|
      WHERE er.C_TANEVID = @pTanevId 
 | 
						|
		    AND er.TOROLT = ''F''
 | 
						|
		    AND er.C_ERTEKELESTEMA IS NOT NULL
 | 
						|
		    AND er.C_ERTEKELESOSZTALYZATID IS NOT NULL
 | 
						|
		    ' + IIF(@pSzuperOsztalyfonok = 1, N'', N'AND (EXISTS(SELECT 1 FROM #OsztalyCsoportokTantargyak ocst WHERE ocst.OsztalyCsoportId = er.C_OSZTALYCSOPORTID AND ocst.TantargyId = er.C_TANTARGYID))')  + N'
 | 
						|
		    ' + IIF(@pTantargyId IS NULL, N'', N'AND er.C_TANTARGYID = @pTantargyId')  + N'
 | 
						|
		    ' + IIF(@pErtekelesTema IS NULL, N'', N'AND REPLACE(er.C_ERTEKELESTEMA,'' '','''') LIKE ''%' + @pErtekelesTema + '%''') + N'
 | 
						|
        ' + IIF(@pOsztalyCsoportId IS NULL, N'', N'AND er.C_OSZTALYCSOPORTID = @pOsztalyCsoportId') + N'
 | 
						|
        ' + IIF(@pErtekelesModIdString IS NULL, N'', N'AND er.C_ERTEKELESMODID IN ('+ @pErtekelesModIdString +')') + N'
 | 
						|
      ) x
 | 
						|
      PIVOT (COUNT(C_ERTEKELESOSZTALYZATID) FOR C_ERTEKELESOSZTALYZATID IN ([1501], [1502], [1503], [1504], [1505])
 | 
						|
      ) s
 | 
						|
      WHERE 1 = 1' + '
 | 
						|
      ' + IIF(@pErdemjegy5Tol IS NULL, N'', 'AND s.[1505] >= @pErdemjegy5Tol') + '
 | 
						|
      ' + IIF(@pErdemjegy5Ig IS NULL, N'', 'AND s.[1505] <= @pErdemjegy5Ig') + '
 | 
						|
      ' + IIF(@pErdemjegy4Tol IS NULL, N'', 'AND s.[1504] >= @pErdemjegy4Tol') + '
 | 
						|
      ' + IIF(@pErdemjegy4Ig IS NULL, N'', 'AND s.[1504] <= @pErdemjegy4Ig') + '
 | 
						|
      ' + IIF(@pErdemjegy3Tol IS NULL, N'', 'AND s.[1503] >= @pErdemjegy3Tol') + '
 | 
						|
      ' + IIF(@pErdemjegy3Ig IS NULL, N'', 'AND s.[1503] <= @pErdemjegy3Ig') + '
 | 
						|
      ' + IIF(@pErdemjegy2Tol IS NULL, N'', 'AND s.[1502] >= @pErdemjegy2Tol') + '
 | 
						|
      ' + IIF(@pErdemjegy2Ig IS NULL, N'', 'AND s.[1502] <= @pErdemjegy2Ig') + '
 | 
						|
      ' + IIF(@pErdemjegy1Tol IS NULL, N'', 'AND s.[1501] >= @pErdemjegy1Tol') + '
 | 
						|
      ' + IIF(@pErdemjegy1Ig IS NULL, N'', 'AND s.[1501] <= @pErdemjegy1Ig') + '
 | 
						|
    ) sub
 | 
						|
    INNER JOIN T_TANTARGY_OSSZES tgy ON sub.TantargyId = tgy.ID AND tgy.TOROLT=''F'' 
 | 
						|
    INNER JOIN T_DICTIONARYITEMBASE_OSSZES dTantargy ON tgy.C_TARGYKATEGORIA = dTantargy.ID AND dTantargy.C_TANEVID = @pTanevId AND dTantargy.TOROLT=''F''
 | 
						|
    INNER JOIN (
 | 
						|
      SELECT nn.C_NAPDATUMA, tcs.C_OSZTALYCSOPORTID, COUNT(1) AS Letszam
 | 
						|
      FROM T_TANULOCSOPORT_OSSZES tcs
 | 
						|
        INNER JOIN T_NAPTARINAP_OSSZES nn ON nn.C_NAPDATUMA >= tcs.C_BELEPESDATUM 
 | 
						|
          AND (nn.C_NAPDATUMA <= tcs.C_KILEPESDATUM OR tcs.C_KILEPESDATUM IS NULL)
 | 
						|
          AND nn.TOROLT=''F''
 | 
						|
      WHERE nn.C_TANEVID = @pTanevId 
 | 
						|
        ' + IIF(@pOsztalyCsoportId IS NULL, N'', N'AND tcs.C_OSZTALYCSOPORTID = @pOsztalyCsoportId') + N'
 | 
						|
        AND tcs.C_TANEVID = @pTanevId
 | 
						|
        AND tcs.TOROLT=''F''
 | 
						|
      GROUP BY nn.C_NAPDATUMA, tcs.C_OSZTALYCSOPORTID
 | 
						|
    ) letszam ON letszam.C_NAPDATUMA = sub.Datum 
 | 
						|
        AND letszam.C_OSZTALYCSOPORTID = OsztalyCsoportId' + '
 | 
						|
    ' + IIF(@pNemIrtDolgozatotTol IS NULL, N'', N'AND (letszam.Letszam - sub.Cnt) >= @pNemIrtDolgozatotTol') + '
 | 
						|
    ' + IIF(@pNemIrtDolgozatotIg IS NULL, N'', N'AND (letszam.Letszam - sub.Cnt) <= @pNemIrtDolgozatotIg') + '
 | 
						|
    ' + IIF(@pAtlagTol IS NULL, N'', N'AND ROUND(Total / CAST(Cnt AS Float), 2) >= @pAtlagTol') + '
 | 
						|
    ' + IIF(@pAtlagIg IS NULL, N'', N'AND ROUND(Total / CAST(Cnt AS Float), 2) <= @pAtlagIg') + '
 | 
						|
    '
 | 
						|
 | 
						|
  SET @sql = CONCAT(@preSql, @mainSql)
 | 
						|
 | 
						|
  EXEC sp_executesql @sql, N'
 | 
						|
     @pIntezmenyId int
 | 
						|
    ,@pTanevId int
 | 
						|
    ,@pOsztalyCsoportId int
 | 
						|
    ,@pTantargyId int
 | 
						|
    ,@pTanarId int
 | 
						|
    ,@pErtekelesModIdString nvarchar(300)
 | 
						|
    ,@pErtekelesTema nvarchar(255)
 | 
						|
    ,@pAtlagTol float
 | 
						|
    ,@pAtlagIg float
 | 
						|
    ,@pErdemjegy5Tol int
 | 
						|
    ,@pErdemjegy5Ig int
 | 
						|
    ,@pErdemjegy4Tol int
 | 
						|
    ,@pErdemjegy4Ig int
 | 
						|
    ,@pErdemjegy3Tol int
 | 
						|
    ,@pErdemjegy3Ig int
 | 
						|
    ,@pErdemjegy2Tol int
 | 
						|
    ,@pErdemjegy2Ig int
 | 
						|
    ,@pErdemjegy1Tol int
 | 
						|
    ,@pErdemjegy1Ig int
 | 
						|
    ,@pNemIrtDolgozatotTol int
 | 
						|
    ,@pNemIrtDolgozatotIg int
 | 
						|
    ,@pSzuperOsztalyfonok int
 | 
						|
    ,@pDatum datetime'
 | 
						|
    ,@pIntezmenyId = @pIntezmenyId
 | 
						|
    ,@pTanevId = @pTanevId
 | 
						|
    ,@pOsztalyCsoportId = @pOsztalyCsoportId
 | 
						|
    ,@pTantargyId = @pTantargyId
 | 
						|
    ,@pErtekelesModIdString = @pErtekelesModIdString
 | 
						|
    ,@pTanarId = @pTanarId
 | 
						|
    ,@pErtekelesTema = @pErtekelesTema
 | 
						|
    ,@pAtlagTol = @pAtlagTol
 | 
						|
    ,@pAtlagIg = @pAtlagIg
 | 
						|
    ,@pErdemjegy5Tol = @pErdemjegy5Tol
 | 
						|
    ,@pErdemjegy5Ig = @pErdemjegy5Ig
 | 
						|
    ,@pErdemjegy4Tol = @pErdemjegy4Tol
 | 
						|
    ,@pErdemjegy4Ig = @pErdemjegy4Ig
 | 
						|
    ,@pErdemjegy3Tol = @pErdemjegy3Tol
 | 
						|
    ,@pErdemjegy3Ig = @pErdemjegy3Ig
 | 
						|
    ,@pErdemjegy2Tol = @pErdemjegy2Tol
 | 
						|
    ,@pErdemjegy2Ig = @pErdemjegy2Ig
 | 
						|
    ,@pErdemjegy1Tol = @pErdemjegy1Tol
 | 
						|
    ,@pErdemjegy1Ig = @pErdemjegy1Ig
 | 
						|
    ,@pNemIrtDolgozatotTol = @pNemIrtDolgozatotTol
 | 
						|
    ,@pNemIrtDolgozatotIg = @pNemIrtDolgozatotIg
 | 
						|
    ,@pSzuperOsztalyfonok = @pSzuperOsztalyfonok
 | 
						|
    ,@pDatum = @pDatum
 | 
						|
END
 | 
						|
GO
 |