Aşağıdaki kodda, SQL Server 2005'te temel hiyerarşik bir yapının en üst düzey ebadını bulmak için özyinelemeli bir CTE (Ortak Tablo İfadesi) kullanıyorum. Bu hiyerarşinin kuralı, her CustID'nin bir ParentID'ye sahip olması ve eğer CustID'nin üst ailesi yoksa, o zaman ParentID = CustID olması ve en yüksek düzey olmasıdır.Yinelemeli bir CTE'de üretilen son kaydı nasıl alırsınız?
DECLARE @LookupID int
--Our test value
SET @LookupID = 1
WITH cteLevelOne (ParentID, CustID) AS
(
SELECT a.ParentID, a.CustID
FROM tblCustomer AS a
WHERE a.CustID = @LookupID
UNION ALL
SELECT a.ParentID, a.CustID
FROM tblCustomer AS a
INNER JOIN cteLevelOne AS c ON a.CustID = c.ParentID
WHERE c.CustID <> a.CustomerID
)
Yani tblCustomer aşağıdaki gibiyse:
ParentID CustID
5 5
1 8
5 4
4 1
Yukarıdaki koddan almak sonucudur: İstediğim o sonucun sadece son satır olan
ParentID CustID
4 1
5 4
5 5
:
ParentID CustID
5 5
How d o CTE'de üretilen en son kaydı (en yüksek CustID değeri olacak mı) döndürdüm?
Ayrıca, bu tabloda birden çok ilişkili olmayan CustID hiyerarşisi olduğunu unutmayın, bu nedenle SELECT * FROM tblCustomer WHERE ParentID = CustID değerini yapamıyorum. Kimlik numarası hiyerarşide nerede olduğuyla ilgili olmadığı için ParentID veya CustID tarafından sipariş veremiyorum.