Anahtar Alan Olmadan Join | MsSql

Merhaba, başlıkta belki çok iyi anlatamadım ancak şöyle bir ihtiyacım oldu. İçerisinde kirli ama pasif kayıtların olduğu bir tablom var. (IASRESERVATIONPOOL)

Bir tane de hatalı ve silinmesi gereken verilerimin olduğu tablom var. (IASRESERVATION)

Bu hatalı verilere karşılık POOL tarafında bir kayıt oluşturma gerekiyor.

Ancak aralarında herhangi bir bağlantı yok. Bana POOL tablosundan rastgele bir kirli kayıt lazımdı. Elimdeki 100 kayıt için oradan herhangi bir 100 kayda ihtiyacım var.

-- Havuz tablosunda kullanılmaya musait kirli ama pasif olan kayitlar.
-- Bunlardan yeteri kadar var, bana 100 tanesi lazimdi.
WITH ctePool AS
(
	SELECT p.RESERNUM
		 , p.CLIENT
		 , p.COMPANY
		 , p.WAREHOUSE
		 , p.STOCKPLACE
		 , p.QUANTITY
		 , p.SRCDOCTYPE
		 , p.SRCDOCNUM
		 , p.SRCITEMNUM
		 , p.CHANGEDAT
		 , p.CHANGEDBY
		 , p.CUSTOMER
		 , ROW_NUMBER() OVER (ORDER BY p.CREATEDAT DESC) AS SatirNo
	FROM IASRESERVATIONPOOL p
	WHERE p.CLIENT = 'RB'
		AND p.COMPANY = '05'
),
-- Asagidaki kayitlar rezervasyonlarini silip havuz tarafina aktaracaklarim.
-- 100 adet kayit var guncelleyecegim.
cteRez AS
(
	SELECT r.RESERNUM
		 , r.CLIENT
		 , r.COMPANY
		 , r.WAREHOUSE
		 , r.STOCKPLACE
		 , r.QUANTITY
		 , r.SRCDOCTYPE
		 , r.SRCDOCNUM
		 , r.SRCITEMNUM
		 , r.CUSTOMER
		 , ROW_NUMBER() OVER (ORDER BY r.CREATEDAT DESC) AS SatirNo
	FROM IASRESERVATION r
	WHERE r.CLIENT = '00'
		AND r.COMPANY = '05'
		AND r.WAREHOUSE = 'TRN'
		AND r.CUSTOMER = '0000000010'
		AND r.CREATEDBY = 'ZAMKINOS'
)

Bu iki tablo ile ihtiyacım olan verileri çektim. Güncelleme için de şunu kullandım:

UPDATE p
SET p.CLIENT = '00'
  , p.COMPANY = r.COMPANY
  , p.WAREHOUSE = r.WAREHOUSE
  , p.STOCKPLACE = '*'
  , p.QUANTITY = r.QUANTITY
  , p.CHANGEDAT = GETDATE()
  , p.CHANGEDBY = 'ZAMKINOS'
  , p.SRCDOCTYPE = r.SRCDOCTYPE
  , p.SRCDOCNUM = r.SRCDOCNUM
  , p.SRCITEMNUM = r.SRCITEMNUM
  , p.CUSTOMER = r.CUSTOMER
FROM cteRez r
	INNER JOIN ctePool p ON p.SatirNo = r.SatirNo

Selamlar.

Leave a Reply

Your email address will not be published.