In dem folgenden Code verwende ich einen rekursiven CTE (allgemeiner Tabellenausdruck) in SQL Server 2005, um zu versuchen, den übergeordnete übergeordneten Ebene einer grundlegenden hierarchischen Struktur zu finden. Die Regel dieser Hierarchie besteht darin, dass jede CustID eine ParentID hat und wenn die CustID kein Parent hat, dann die ParentID = CustID und es die höchste Ebene ist.Wie erhalten Sie den letzten Datensatz in einem rekursiven CTE generiert?
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
)
Also, wenn tblCustomer sieht wie folgt aus:
ParentID CustID
5 5
1 8
5 4
4 1
Das Ergebnis, das ich aus dem Code erhalten oben ist:
ParentID CustID
4 1
5 4
5 5
Was ich will, nur die letzte Zeile dieses Ergebnisses ist:
ParentID CustID
5 5
Wie d o Ich gebe nur den letzten im CTE generierten Datensatz zurück (was die höchste CustID-Ebene wäre)?
Beachten Sie auch, dass es mehrere unabhängige CustID-Hierarchien in dieser Tabelle gibt, so dass ich nicht einfach eine SELECT * FROM tblCustomer WHERE ParentID = CustID tun kann. Ich kann nicht nach ParentID oder CustID sortieren, da die ID-Nummer nicht mit der Position in der Hierarchie verknüpft ist.