kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20180110180717_KRETA_4691/sp_GetStatTanuloTantargyiMulasztasMegtartott.sql
2024-03-13 00:33:46 +01:00

102 lines
No EOL
3.5 KiB
Transact-SQL

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
IF OBJECT_ID('[dbo].[sp_GetStatTanuloTantargyiMulasztasMegtartott]') IS NOT NULL
BEGIN
DROP PROCEDURE [dbo].[sp_GetStatTanuloTantargyiMulasztasMegtartott]
END
GO
CREATE PROCEDURE [dbo].[sp_GetStatTanuloTantargyiMulasztasMegtartott]
@osztalyId INT,
@tanevId INT,
@iskolaErekeduTavolletId INT
AS
BEGIN
SET NOCOUNT ON;
--Osztály tanulói
CREATE TABLE #students (Id INT)
INSERT INTO #students
SELECT
f.ID
FROM T_TANULOCSOPORT_OSSZES tcs
INNER JOIN T_FELHASZNALO_OSSZES f ON f.ID = tcs.C_TANULOID
WHERE
tcs.C_OSZTALYCSOPORTID=@osztalyId
AND tcs.TOROLT='F'
AND tcs.C_KILEPESDATUM IS NULL
ORDER BY f.C_NYOMTATASINEV
--Tanuló mulasztásai
CREATE TABLE #mulasztas (Ossz INT, Tanulo INT, Tantargy INT, OsztalyCsoport INT)
INSERT INTO #mulasztas
SELECT
COUNT(tm.ID)
, tm.C_ORATANULOIID
, t.ID
, tao.C_OSZTALYCSOPORTID
FROM T_TANULOMULASZTAS_OSSZES tm
INNER JOIN T_TANITASIORA_OSSZES tao on tao.ID = tm.C_TANITASIORAKID
INNER JOIN T_TANTARGY_OSSZES t on t.ID = tao.C_TANTARGYID
INNER JOIN #students s on s.ID = tm.C_ORATANULOIID
where tm.C_TANEVID=@tanevId
AND tm.Torolt='F'
AND tm.C_TIPUS=1500--and tm.c_igazolt='T' or tm.c_igazolt='F' ?????
AND ((tao.C_OSZTALYCSOPORTID IN (SELECT ID FROM T_OSZTALY_OSSZES)) OR (tao.C_OSZTALYCSOPORTID IN (SELECT ID FROM T_CSOPORT_OSSZES WHERE C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId)))))
AND tm.C_IGAZOLASTIPUSA <> @iskolaErekeduTavolletId
GROUP BY tm.C_ORATANULOIID, t.ID, tao.C_OSZTALYCSOPORTID
--Naplózott óra tanulónként
CREATE TABLE #naplozott (Tanulo INT, Tantargy INT, OsztalyCsoport INT, Ossz INT)
INSERT INTO #naplozott
SELECT
m.Tanulo
, m.Tantargy
, m.OsztalyCsoport
, COUNT(DISTINCT tao.ID)
FROM #mulasztas m
INNER JOIN T_TANITASIORA_OSSZES tao ON tao.C_OSZTALYCSOPORTID=m.OsztalyCsoport AND tao.C_TANTARGYID=m.Tantargy AND tao.C_MEGTARTOTT='T'
INNER JOIN T_TANULOCSOPORT_OSSZES tcs ON tcs.C_TANULOID=m.Tanulo AND tcs.C_OSZTALYCSOPORTID=m.OsztalyCsoport
AND ((tao.C_OSZTALYCSOPORTID IN (SELECT ID FROM T_OSZTALY_OSSZES)) OR (tao.C_OSZTALYCSOPORTID IN (SELECT ID FROM T_CSOPORT_OSSZES WHERE C_TIPUSA IN (SELECT ID FROM fnGetTanoraiCeluCsoportTipusok(@tanevId)))))
WHERE
tao.TOROLT='F'
AND tao.C_DATUM >= tcs.C_BELEPESDATUM
GROUP BY m.Tanulo, m.Tantargy, m.OsztalyCsoport
DECLARE @cols AS NVARCHAR(MAX),
@query AS NVARCHAR(MAX),
@colsIn AS NVARCHAR(MAX)
SELECT @cols= ISNULL(@cols + ',','') + QUOTENAME(Tantargy) FROM (SELECT DISTINCT m.Tantargy Tantargy FROM #mulasztas m) Tantargy
SELECT @colsIn= ISNULL(@colsIn + ',','') +'CONVERT(NVARCHAR(MAX),'+QUOTENAME(Tantargy) + ')+''%'' as ' + QUOTENAME(nev) FROM (SELECT DISTINCT m.Tantargy AS Tantargy, t.c_nev nev FROM #mulasztas m
INNER JOIN T_TANTARGY_OSSZES t ON t.id=m.Tantargy) TantargyCols
set @query='
SELECT
fel.C_NYOMTATASINEV Tanulo
, '+@colsIn+'
FROM (SELECT
mulasztas.Tanulo
, ROUND(CONVERT(FLOAT, mulasztas.Ossz)/CONVERT(FLOAT, naplozott.Ossz)*100, 0) Osszes
, mulasztas.Tantargy
FROM #students s
INNER JOIN #mulasztas mulasztas on mulasztas.Tanulo=s.ID
INNER JOIN #naplozott naplozott on naplozott.Tantargy=mulasztas.Tantargy and naplozott.OsztalyCsoport=mulasztas.OsztalyCsoport and naplozott.Tanulo=mulasztas.Tanulo
)a
PIVOT (MAX(Osszes) FOR Tantargy IN ('+@cols+'))pv
INNER JOIN T_FELHASZNALO_OSSZES fel on fel.ID=Tanulo
ORDER BY fel.C_NYOMTATASINEV
'
EXEC sp_executesql @query
DROP TABLE #students
DROP TABLE #mulasztas
DROP TABLE #naplozott
END
GO