kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20190722133944_DB_887/Cleanup_AddIndex.sql
2024-03-13 00:33:46 +01:00

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)