아래 코드에서 SQL Server 2005의 재귀 CTE (Common Table Expression)를 사용하여 기본 계층 구조의 최상위 수준 부모를 찾으려고합니다. 이 계층의 규칙은 모든 CustID에 ParentID가 있고 CustID에 부모가없는 경우 ParentID = CustID이며 최상위 레벨이라는 규칙이 있습니다.재귀 CTE에서 마지막 레코드를 어떻게 생성합니까?
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
)
그래서 tblCustomer은 다음과 같습니다 경우 :
ParentID CustID
5 5
1 8
5 4
4 1
나는 위의 코드에서 얻을 결과입니다 : 내가 원하는 것은 그 결과의 맨 마지막 줄이
ParentID CustID
4 1
5 4
5 5
:
ParentID CustID
5 5
o CTE (최상위 CustID가 될 것입니다)에서 생성 된 마지막 레코드 만 반환합니까?
이 테이블에는 무관 한 CustID 계층 구조가 여러 개 있으므로 SELECT * FROM tblCustomer WHERE ParentID = CustID를 수행 할 수 없습니다. ID 번호가 계층 구조의 위치와 관련이 없으므로 ParentID 또는 CustID로 주문할 수 없습니다.