DROP TABLE IF EXISTS #allAddresses CREATE TABLE #allAddresses (GenericRn int,TipusRn int,CreatedRn int,C_FELHASZNALOID int,CREATED datetime,C_CIMTIPUSA int,C_CIMID int) INSERT INTO #allAddresses SELECT ROW_NUMBER() OVER (PARTITION BY C_FELHASZNALOID ORDER BY c.CREATED DESC) as GenericRn ,ROW_NUMBER() OVER (PARTITION BY C_FELHASZNALOID,c.C_CIMTIPUSA ORDER BY c.CREATED DESC) as TipusRn ,ROW_NUMBER() OVER (PARTITION BY C_FELHASZNALOID ORDER BY c.CREATED DESC) as CreatedRn ,C_FELHASZNALOID ,c.CREATED ,c.C_CIMTIPUSA ,c.ID as C_CIMID FROM T_TANULO t INNER JOIN T_CIM c ON c.C_FELHASZNALOID = t.ID AND c.TOROLT='F' AND c.C_GONDVISELOID IS NULL WHERE t.TOROLT='F' AND NOT EXISTS(SELECT 1 FROM T_CIM WHERE C_FELHASZNALOID = t.ID AND TOROLT='F' AND C_ALAPERTELMEZETT='T' AND C_GONDVISELOID IS NULL) ORDER BY C_FELHASZNALOID,c.CREATED /*================================================================== --Ha valakinek egy címe van tanulónál, akkor legyen alapértelmezett. ====================================================================*/ DROP TABLE IF EXISTS #onlyOneAddress CREATE TABLE #onlyOneAddress (C_CIMID int,C_FELHASZNALOID int) INSERT INTO #onlyOneAddress SELECT C_CIMID,C_FELHASZNALOID from #allAddresses a WHERE NOT EXISTS (SELECT 1 FROM #allAddresses WHERE C_FELHASZNALOID = a.C_FELHASZNALOID AND GenericRn>1) DELETE FROM #allAddresses WHERE C_CIMID IN (SELECT C_CIMID FROM #onlyOneAddress) /*================================================================== --Ha több van, akkor a tartózkodási helye legyen az alapértelmezett. --909 Tartózkodási hely --907 Állandó lakcím ====================================================================*/ DROP TABLE IF EXISTS #haveTartHely CREATE TABLE #haveTartHely (C_CIMID int,C_FELHASZNALOID int) INSERT INTO #haveTartHely select C_CIMID,C_FELHASZNALOID from #allAddresses a WHERE a.C_CIMTIPUSA = 909 AND a.TipusRn = 1 DELETE FROM #allAddresses WHERE C_FELHASZNALOID IN (SELECT C_FELHASZNALOID FROM #haveTartHely) /*================================================================== --Ha nincs tartózkodási helye, akkor az állandó lakcíme. ====================================================================*/ DROP TABLE IF EXISTS #haveAllando CREATE TABLE #haveAllando (C_CIMID int,C_FELHASZNALOID int) INSERT INTO #haveAllando SELECT C_CIMID,C_FELHASZNALOID from #allAddresses a WHERE a.C_CIMTIPUSA = 907 AND a.TipusRn = 1 DELETE FROM #allAddresses WHERE C_FELHASZNALOID IN (SELECT C_FELHASZNALOID FROM #haveAllando) /*================================================================== --Ha ez sincs, akkor pedig a legújabb. ====================================================================*/ DROP TABLE IF EXISTS #newest CREATE TABLE #newest (C_CIMID int,C_FELHASZNALOID int) INSERT INTO #newest SELECT C_CIMID,C_FELHASZNALOID from #allAddresses a WHERE CreatedRn = 1 DELETE FROM #allAddresses WHERE C_FELHASZNALOID IN (SELECT C_FELHASZNALOID FROM #newest) /*============================UPDATE================================ --Ha valakinek egy címe van tanulónál, akkor legyen alapértelmezett. ====================================================================*/ UPDATE c SET C_ALAPERTELMEZETT='F' FROM T_CIM c INNER JOIN #onlyOneAddress a ON a.C_FELHASZNALOID = c.C_FELHASZNALOID UPDATE c SET C_ALAPERTELMEZETT='T' FROM T_CIM c INNER JOIN #onlyOneAddress a ON a.C_FELHASZNALOID = c.C_FELHASZNALOID AND a.C_CIMID = c.ID /*============================UPDATE================================ --Ha több van, akkor a tartózkodási helye legyen az alapértelmezett. --909 Tartózkodási hely --907 Állandó lakcím ====================================================================*/ UPDATE c SET C_ALAPERTELMEZETT='F' FROM T_CIM c INNER JOIN #haveTartHely a ON a.C_FELHASZNALOID = c.C_FELHASZNALOID UPDATE c SET C_ALAPERTELMEZETT='T' FROM T_CIM c INNER JOIN #haveTartHely a ON a.C_FELHASZNALOID = c.C_FELHASZNALOID AND a.C_CIMID = c.ID /*============================UPDATE================================ --Ha nincs tartózkodási helye, akkor az állandó lakcíme. ====================================================================*/ UPDATE c SET C_ALAPERTELMEZETT='F' FROM T_CIM c INNER JOIN #haveAllando a ON a.C_FELHASZNALOID = c.C_FELHASZNALOID UPDATE c SET C_ALAPERTELMEZETT='T' FROM T_CIM c INNER JOIN #haveAllando a ON a.C_FELHASZNALOID = c.C_FELHASZNALOID AND a.C_CIMID = c.ID /*============================UPDATE================================ --Ha ez sincs, akkor pedig a legújabb. ====================================================================*/ UPDATE c SET C_ALAPERTELMEZETT='F' FROM T_CIM c INNER JOIN #newest a ON a.C_FELHASZNALOID = c.C_FELHASZNALOID UPDATE c SET C_ALAPERTELMEZETT='T' FROM T_CIM c INNER JOIN #newest a ON a.C_FELHASZNALOID = c.C_FELHASZNALOID AND a.C_CIMID = c.ID