kreta/Kreta.DataAccess.Migrations/Scripts/Archive/20190206145244_AL_510/AL_510.sql
2024-03-13 00:33:46 +01:00

181 lines
No EOL
10 KiB
Transact-SQL

-- Elso korben a duplazasok
UPDATE T_TANULOMULASZTAS SET
C_TIPUS = 1817,
C_KESESPERCBEN = NULL
WHERE ID IN (
SELECT
CASE
WHEN t.a_tanoracelu = t.b_tanoracelu AND a_CREATED < b_CREATED THEN b_ID
WHEN t.a_tanoracelu = t.b_tanoracelu AND a_CREATED >= b_CREATED THEN a_ID
WHEN t.a_tanoracelu = 'T' THEN b_ID
WHEN t.b_tanoracelu = 'T' THEN a_ID
END AS IDForUPDATE
FROM (
SELECT
count(1) over(partition by a.ID) AS a_CNT,count(1) over(partition by b.ID) AS b_CNT,
a.tanoracelu AS a_tanoracelu,a.ID AS a_ID, a.C_ORAKEZDETE AS a_C_ORAKEZDETE,a.C_ORAVEGE AS a_C_ORAVEGE, a.CREATED AS a_CREATED,
b.tanoracelu AS b_tanoracelu,b.ID AS b_ID, b.C_ORAKEZDETE AS b_C_ORAKEZDETE,b.C_ORAVEGE AS b_C_ORAVEGE, b.CREATED AS b_CREATED,a.C_ORATANULOIID
FROM (
SELECT
IIF(o.ID IS NOT NULL OR cs.C_TIPUSA = 1034 OR cst.C_ISTANORAICELU = 'T','T','F') AS tanoracelu, tm.ID,tm.C_INTEZMENYID,ocs.C_NEV,cs.C_TIPUSA,tao.C_OSZTALYCSOPORTID, tao.C_ORAKEZDETE,tao.C_ORAVEGE,tao.C_DATUM, tm.C_ORATANULOIID, tao.ID AS taoID, tm.CREATED
FROM T_TANULOMULASZTAS tm
INNER JOIN T_TANEV tv ON tv.ID = tm.C_TANEVID AND tv.C_AKTIV = 'T'
INNER JOIN T_TANITASIORA tao ON tm.C_TANITASIORAKID = tao.ID AND tao.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F'
LEFT JOIN T_CSOPORT cs ON cs.ID = ocs.ID AND cs.TOROLT = 'F'
LEFT JOIN T_OSZTALY o ON o.ID = ocs.ID AND o.TOROLT = 'F'
LEFT JOIN T_CSOPORTTIPUS cst ON cst.ID = cs.C_TIPUSA AND cst.TOROLT = 'F'AND cst.C_ALTANEVID = cs.C_ALTANEVID
WHERE tm.TOROLT = 'F'
AND tm.C_TIPUS BETWEEN 1499 AND 1500
AND tao.C_DATUM > '20180831'
AND C_IGAZOLASTIPUSA IS NULL
) a
INNER JOIN (
SELECT
IIF(o.ID IS NOT NULL OR cs.C_TIPUSA = 1034 OR cst.C_ISTANORAICELU = 'T','T','F') AS tanoracelu,tm.ID,tm.C_INTEZMENYID,ocs.C_NEV,cs.C_TIPUSA ,tao.C_OSZTALYCSOPORTID,tao.C_ORAKEZDETE,tao.C_ORAVEGE, tao.C_DATUM, tm.C_ORATANULOIID, tao.ID AS taoID, tm.CREATED
FROM T_TANULOMULASZTAS tm
INNER JOIN T_TANEV tv ON tv.ID = tm.C_TANEVID AND tv.C_AKTIV = 'T'
INNER JOIN T_TANITASIORA tao ON tm.C_TANITASIORAKID = tao.ID AND tao.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F'
LEFT JOIN T_CSOPORT cs ON cs.ID = ocs.ID AND cs.TOROLT = 'F'
LEFT JOIN T_OSZTALY o ON o.ID = ocs.ID AND o.TOROLT = 'F'
LEFT JOIN T_CSOPORTTIPUS cst ON cst.ID = cs.C_TIPUSA AND cst.TOROLT = 'F'AND cst.C_ALTANEVID = cs.C_ALTANEVID
WHERE tm.TOROLT = 'F'
AND tm.C_TIPUS BETWEEN 1499 AND 1500
AND tao.C_DATUM > '20180831'
AND C_IGAZOLASTIPUSA IS NULL
) b ON a.C_DATUM = b.C_DATUM AND a.C_ORAKEZDETE < b.C_ORAVEGE AND a.C_ORAVEGE > b.C_ORAKEZDETE AND a.C_ORATANULOIID = b.C_ORATANULOIID AND a.CREATED < b.CREATED
) t
WHERE a_CNT = 1 AND b_CNT = 1
)
-- a tobbszori duplazodasokra 5szor futatni
DECLARE @TanuloID int, @Datum DATETIME, @megtartandoID int
DECLARE @i int = 0
WHILE @i < 5 BEGIN
DECLARE cur CURSOR LOCAL FOR
SELECT DISTINCT a.C_ORATANULOIID, a.C_DATUM
FROM (
SELECT
IIF(o.ID IS NOT NULL OR cs.C_TIPUSA = 1034 OR cst.C_ISTANORAICELU = 'T','T','F') AS tanoracelu, tm.ID,tm.C_INTEZMENYID,ocs.C_NEV,cs.C_TIPUSA,tao.C_OSZTALYCSOPORTID, tao.C_ORAKEZDETE,tao.C_ORAVEGE,tao.C_DATUM, tm.C_ORATANULOIID, tao.ID AS taoID, tm.CREATED
FROM T_TANULOMULASZTAS tm
INNER JOIN T_TANEV tv ON tv.ID = tm.C_TANEVID AND tv.C_AKTIV = 'T'
INNER JOIN T_TANITASIORA tao ON tm.C_TANITASIORAKID = tao.ID AND tao.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F'
LEFT JOIN T_CSOPORT cs ON cs.ID = ocs.ID AND cs.TOROLT = 'F'
LEFT JOIN T_OSZTALY o ON o.ID = ocs.ID AND o.TOROLT = 'F'
LEFT JOIN T_CSOPORTTIPUS cst ON cst.ID = cs.C_TIPUSA AND cst.TOROLT = 'F'AND cst.C_ALTANEVID = cs.C_ALTANEVID
WHERE tm.TOROLT = 'F'
AND tm.C_TIPUS BETWEEN 1499 AND 1500
AND tao.C_DATUM > '20180831'
AND C_IGAZOLASTIPUSA IS NULL
) a
INNER JOIN (
SELECT
IIF(o.ID IS NOT NULL OR cs.C_TIPUSA = 1034 OR cst.C_ISTANORAICELU = 'T','T','F') AS tanoracelu,tm.ID,tm.C_INTEZMENYID,ocs.C_NEV,cs.C_TIPUSA ,tao.C_OSZTALYCSOPORTID,tao.C_ORAKEZDETE,tao.C_ORAVEGE, tao.C_DATUM, tm.C_ORATANULOIID, tao.ID AS taoID, tm.CREATED
FROM T_TANULOMULASZTAS tm
INNER JOIN T_TANEV tv ON tv.ID = tm.C_TANEVID AND tv.C_AKTIV = 'T'
INNER JOIN T_TANITASIORA tao ON tm.C_TANITASIORAKID = tao.ID AND tao.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F'
LEFT JOIN T_CSOPORT cs ON cs.ID = ocs.ID AND cs.TOROLT = 'F'
LEFT JOIN T_OSZTALY o ON o.ID = ocs.ID AND o.TOROLT = 'F'
LEFT JOIN T_CSOPORTTIPUS cst ON cst.ID = cs.C_TIPUSA AND cst.TOROLT = 'F'AND cst.C_ALTANEVID = cs.C_ALTANEVID
WHERE tm.TOROLT = 'F'
AND tm.C_TIPUS BETWEEN 1499 AND 1500
AND tao.C_DATUM > '20180831'
AND C_IGAZOLASTIPUSA IS NULL
) b ON a.C_DATUM = b.C_DATUM
AND a.C_ORAKEZDETE < b.C_ORAVEGE AND a.C_ORAVEGE > b.C_ORAKEZDETE
AND a.C_ORATANULOIID = b.C_ORATANULOIID AND a.CREATED < b.CREATED
OPEN cur;
FETCH NEXT FROM cur INTO @TanuloID, @Datum;
WHILE @@FETCH_STATUS = 0 BEGIN
SET @megtartandoID = NULL
SELECT TOP 1 @megtartandoID = a.ID
FROM (
SELECT
IIF(o.ID IS NOT NULL OR cs.C_TIPUSA = 1034 OR cst.C_ISTANORAICELU = 'T','T','F') AS tanoracelu, tm.ID,tm.C_INTEZMENYID,ocs.C_NEV,cs.C_TIPUSA,tao.C_OSZTALYCSOPORTID, tao.C_ORAKEZDETE,tao.C_ORAVEGE,tao.C_DATUM, tm.C_ORATANULOIID, tao.ID AS taoID, tm.CREATED
FROM T_TANULOMULASZTAS tm
INNER JOIN T_TANEV tv ON tv.ID = tm.C_TANEVID AND tv.C_AKTIV = 'T'
INNER JOIN T_TANITASIORA tao ON tm.C_TANITASIORAKID = tao.ID AND tao.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F'
LEFT JOIN T_CSOPORT cs ON cs.ID = ocs.ID AND cs.TOROLT = 'F'
LEFT JOIN T_OSZTALY o ON o.ID = ocs.ID AND o.TOROLT = 'F'
LEFT JOIN T_CSOPORTTIPUS cst ON cst.ID = cs.C_TIPUSA AND cst.TOROLT = 'F'AND cst.C_ALTANEVID = cs.C_ALTANEVID
WHERE tm.TOROLT = 'F'
AND tm.C_TIPUS BETWEEN 1499 AND 1500
AND tao.C_DATUM > '20180831'
AND C_IGAZOLASTIPUSA IS NULL
AND tm.C_ORATANULOIID = @TanuloID
AND tao.C_DATUM = @Datum
) a
INNER JOIN (
SELECT
IIF(o.ID IS NOT NULL OR cs.C_TIPUSA = 1034 OR cst.C_ISTANORAICELU = 'T','T','F') AS tanoracelu,tm.ID,tm.C_INTEZMENYID,ocs.C_NEV,cs.C_TIPUSA ,tao.C_OSZTALYCSOPORTID,tao.C_ORAKEZDETE,tao.C_ORAVEGE, tao.C_DATUM, tm.C_ORATANULOIID, tao.ID AS taoID, tm.CREATED
FROM T_TANULOMULASZTAS tm
INNER JOIN T_TANEV tv ON tv.ID = tm.C_TANEVID AND tv.C_AKTIV = 'T'
INNER JOIN T_TANITASIORA tao ON tm.C_TANITASIORAKID = tao.ID AND tao.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F'
LEFT JOIN T_CSOPORT cs ON cs.ID = ocs.ID AND cs.TOROLT = 'F'
LEFT JOIN T_OSZTALY o ON o.ID = ocs.ID AND o.TOROLT = 'F'
LEFT JOIN T_CSOPORTTIPUS cst ON cst.ID = cs.C_TIPUSA AND cst.TOROLT = 'F'AND cst.C_ALTANEVID = cs.C_ALTANEVID
WHERE tm.TOROLT = 'F'
AND tm.C_TIPUS BETWEEN 1499 AND 1500
AND tao.C_DATUM > '20180831'
AND C_IGAZOLASTIPUSA IS NULL
AND tm.C_ORATANULOIID = @TanuloID
AND tao.C_DATUM = @Datum
) b ON a.C_DATUM = b.C_DATUM AND
a.C_ORAKEZDETE < b.C_ORAVEGE AND a.C_ORAVEGE > b.C_ORAKEZDETE
AND a.C_ORATANULOIID = b.C_ORATANULOIID AND a.CREATED < b.CREATED
ORDER BY a.tanoracelu DESC,a.CREATED
UPDATE T_TANULOMULASZTAS SET
C_TIPUS = 1817,
C_KESESPERCBEN = NULL
WHERE ID IN(
SELECT b.ID
FROM (
SELECT
IIF(o.ID IS NOT NULL OR cs.C_TIPUSA = 1034 OR cst.C_ISTANORAICELU = 'T','T','F') AS tanoracelu, tm.ID,tm.C_INTEZMENYID,ocs.C_NEV,cs.C_TIPUSA,tao.C_OSZTALYCSOPORTID, tao.C_ORAKEZDETE,tao.C_ORAVEGE,tao.C_DATUM, tm.C_ORATANULOIID, tao.ID AS taoID, tm.CREATED
FROM T_TANULOMULASZTAS tm
INNER JOIN T_TANEV tv ON tv.ID = tm.C_TANEVID AND tv.C_AKTIV = 'T'
INNER JOIN T_TANITASIORA tao ON tm.C_TANITASIORAKID = tao.ID AND tao.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F'
LEFT JOIN T_CSOPORT cs ON cs.ID = ocs.ID AND cs.TOROLT = 'F'
LEFT JOIN T_OSZTALY o ON o.ID = ocs.ID AND o.TOROLT = 'F'
LEFT JOIN T_CSOPORTTIPUS cst ON cst.ID = cs.C_TIPUSA AND cst.TOROLT = 'F'AND cst.C_ALTANEVID = cs.C_ALTANEVID
WHERE tm.TOROLT = 'F'
AND tm.C_TIPUS BETWEEN 1499 AND 1500
AND tao.C_DATUM > '20180831'
AND C_IGAZOLASTIPUSA IS NULL
AND tm.C_ORATANULOIID = @TanuloID
AND tao.C_DATUM = @Datum
AND tm.ID = @megtartandoID
) a
INNER JOIN (
SELECT
IIF(o.ID IS NOT NULL OR cs.C_TIPUSA = 1034 OR cst.C_ISTANORAICELU = 'T','T','F') AS tanoracelu,tm.ID,tm.C_INTEZMENYID,ocs.C_NEV,cs.C_TIPUSA ,tao.C_OSZTALYCSOPORTID,tao.C_ORAKEZDETE,tao.C_ORAVEGE, tao.C_DATUM, tm.C_ORATANULOIID, tao.ID AS taoID, tm.CREATED
FROM T_TANULOMULASZTAS tm
INNER JOIN T_TANEV tv ON tv.ID = tm.C_TANEVID AND tv.C_AKTIV = 'T'
INNER JOIN T_TANITASIORA tao ON tm.C_TANITASIORAKID = tao.ID AND tao.TOROLT = 'F'
INNER JOIN T_OSZTALYCSOPORT ocs ON ocs.ID = tao.C_OSZTALYCSOPORTID AND ocs.TOROLT = 'F'
LEFT JOIN T_CSOPORT cs ON cs.ID = ocs.ID AND cs.TOROLT = 'F'
LEFT JOIN T_OSZTALY o ON o.ID = ocs.ID AND o.TOROLT = 'F'
LEFT JOIN T_CSOPORTTIPUS cst ON cst.ID = cs.C_TIPUSA AND cst.TOROLT = 'F'AND cst.C_ALTANEVID = cs.C_ALTANEVID
WHERE tm.TOROLT = 'F'
AND tm.C_TIPUS BETWEEN 1499 AND 1500
AND tao.C_DATUM > '20180831'
AND C_IGAZOLASTIPUSA IS NULL
AND tm.C_ORATANULOIID = @TanuloID
AND tao.C_DATUM = @Datum
) b ON a.C_DATUM = b.C_DATUM
AND a.C_ORAKEZDETE < b.C_ORAVEGE AND a.C_ORAVEGE > b.C_ORAKEZDETE
AND a.C_ORATANULOIID = b.C_ORATANULOIID AND a.CREATED < b.CREATED
)
FETCH NEXT FROM cur INTO @TanuloID, @Datum;
END;
SET @i+=1
CLOSE cur;
DEALLOCATE cur;
END;