83 lines
4.9 KiB
SQL
83 lines
4.9 KiB
SQL
/*
|
|
Csak üres (1817) mulasztások - a legkorábbi maradjon
|
|
Hiányzás (1500) + üres (1817) (vagy fordítva) - A hiányzás maradjon
|
|
Késés (1499) + Késés (1499) esetén egybe összeadni a kettő értékét, ha minkettő igazolt vagy igazolatlan, ha különböző akkor az igazoltat hagyjuk meg
|
|
Késés (1499) + hiányzás (1500) (vagy fordítva) - hiányzás maradjon
|
|
N * Hiányzás (1500) - Legkorábbi igazolt ha van, egyébként a legkorábbi
|
|
*/
|
|
|
|
DROP TABLE IF EXISTS #tmp
|
|
SELECT tm.ID,x.*,dib.C_NAME
|
|
INTO #tmp
|
|
FROM(
|
|
SELECT
|
|
C_ORATANULOIID
|
|
,C_TANITASIORAKID
|
|
FROM T_TANULOMULASZTAS tm
|
|
|
|
WHERE tm.TOROLT='F'
|
|
GROUP BY C_ORATANULOIID,C_TANITASIORAKID
|
|
HAVING COUNT(*)>1) x
|
|
INNER JOIN T_TANULOMULASZTAS tm ON tm.TOROLT='F' AND tm.C_ORATANULOIID = x.C_ORATANULOIID AND tm.C_TANITASIORAKID = x.C_TANITASIORAKID
|
|
INNER JOIN T_DICTIONARYITEMBASE dib ON dib.ID=tm.C_TIPUS AND dib.C_TANEVID=tm.C_TANEVID
|
|
|
|
DROP TABLE IF EXISTS #mulasztasok
|
|
SELECT
|
|
Count(*) db
|
|
,STUFF((SELECT DISTINCT ', ' + C_NAME FROM #tmp WHERE #tmp.C_ORATANULOIID=t.C_ORATANULOIID AND #tmp.C_TANITASIORAKID=t.C_TANITASIORAKID FOR XML PATH('')), 1, 1, '') type
|
|
,C_ORATANULOIID
|
|
,C_TANITASIORAKID
|
|
INTO #mulasztasok
|
|
FROM #tmp t
|
|
GROUP BY C_ORATANULOIID,C_TANITASIORAKID
|
|
--================1. Csak üres (1817) mulasztások - a legkorábbi maradjon=========================
|
|
UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
|
|
SELECT ID FROM(
|
|
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
|
|
INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
|
|
WHERE m.type = ' Üres') x WHERE x.rn>1)
|
|
--================2. Hiányzás (1500) + üres (1817) (vagy fordítva) - A hiányzás maradjon=========================
|
|
UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
|
|
SELECT ID FROM(
|
|
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.C_TIPUS, tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
|
|
INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
|
|
WHERE m.type = ' Hiányzás, Üres') x WHERE x.rn>1)
|
|
--================3. Késés (1499) + Késés (1499) esetén egybe összeadni a kettő értékét, ha minkettő igazolt vagy igazolatlan, ha különböző akkor az igazoltat hagyjuk meg=========================
|
|
UPDATE tm SET C_KESESPERCBEN = szum FROM (
|
|
SELECT SUM(C_KESESPERCBEN) szum,tm.C_ORATANULOIID,tm.C_TANITASIORAKID,ISNULL(tm.C_IGAZOLT,'-') C_IGAZOLT FROM #mulasztasok m
|
|
INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID = m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
|
|
WHERE m.type = ' Késés'
|
|
GROUP BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID,ISNULL(tm.C_IGAZOLT,'-')) x
|
|
INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=x.C_ORATANULOIID AND tm.C_TANITASIORAKID=x.C_TANITASIORAKID AND ISNULL(tm.C_IGAZOLT,'-') = x.C_IGAZOLT AND tm.TOROLT='F'
|
|
|
|
UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
|
|
SELECT ID FROM(
|
|
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.C_IGAZOLT DESC, tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
|
|
INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
|
|
WHERE m.type = ' Késés') x WHERE x.rn>1)
|
|
|
|
|
|
--================4. Késés (1499) + hiányzás (1500) (vagy fordítva) - hiányzás maradjon =========================
|
|
UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
|
|
SELECT ID FROM(
|
|
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.C_TIPUS, tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
|
|
INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
|
|
WHERE m.type = ' Hiányzás, Késés') x WHERE x.rn>1)
|
|
--================5. N * Hiányzás (1500) - Legkorábbi igazolt ha van, egyébként a legkorábbi=========================
|
|
UPDATE T_TANULOMULASZTAS SET TOROLT='T',LASTCHANGED=GETDATE(),MODIFIER=0 WHERE ID IN (
|
|
SELECT ID FROM(
|
|
SELECT ROW_NUMBER() OVER (PARTITION BY tm.C_ORATANULOIID,tm.C_TANITASIORAKID ORDER BY tm.C_IGAZOLT DESC,tm.CREATED ASC) rn,tm.ID FROM #mulasztasok m
|
|
INNER JOIN T_TANULOMULASZTAS tm ON tm.C_ORATANULOIID=m.C_ORATANULOIID AND tm.C_TANITASIORAKID = m.C_TANITASIORAKID AND tm.TOROLT='F'
|
|
WHERE m.type = ' Hiányzás') x WHERE x.rn>1)
|
|
--==================INDEX===============================
|
|
DROP INDEX IF EXISTS T_TANULOMULASZTAS.NCU_TanuloMulasztas_OratanuloiId_TanitasiOrakid
|
|
CREATE UNIQUE INDEX NCU_TanuloMulasztas_OratanuloiId_TanitasiOrakid
|
|
ON T_TANULOMULASZTAS(
|
|
C_ORATANULOIID
|
|
,C_TANITASIORAKID
|
|
)
|
|
WHERE TOROLT='F'
|
|
WITH (FILLFACTOR = 80)
|
|
|
|
|
|
|