내 CTE 쿼리에서 아래의 첫 번째 레코드가 반환되지 않습니다 (나중에 표시됨).
내 테이블은 다음과 같습니다.
Key ParentID ChildID (Removed DateJoined Field here)
1 0 1
3 1 83
4 1 84
6 83 85
7 85 86
8 83 87
내 CTE 쿼리는 다음과 같은 결과를 생성합니다.
ID Name Date Joined Parent ID Parent Name Level
83 Hanks, James 2014-09-13 1 Golko, Richard 1
84 Hanks, James 2014-09-13 1 Golko, Richard 1
85 Walker, Jamie 2014-09-13 83 Hanks, James 2
87 Newman, Betty 2014-09-20 83 Hanks, James 2
86 Adams, Ken 2014-09-13 85 Walker, Jamie 3
어떻게 첫 번째 레코드를 반환 할 수 ParentID = 0
있습니까?
다음과 같이 sproc을 호출하면 :
EXEC UCU_RTG_ProgramStructure_GetMemberTree 0,4
위와 같이 여전히 parentID = 1로 시작하는 결과 만 얻습니다.
내 CTE 쿼리는 다음과 같습니다.
CREATE PROCEDURE [dbo].[UCU_RTG_ProgramStructure_GetMemberTree]
@ParentID int,
@MaxLevel int
AS
WITH matrix
AS
(
--initialization
SELECT UserID, DateJoined, ParentID, 1 AS lvl
FROM dbo.UCU_RTG_ProgramStructure
WHERE ParentID = @ParentID
UNION ALL
--recursive execution
SELECT p.UserID,p.DateJoined,p.ParentID, lvl+1
FROM dbo.UCU_RTG_ProgramStructure p INNER JOIN matrix m
ON p.ParentID = m.UserID
WHERE lvl < @MaxLevel
)
SELECT matrix.UserID, u.LastName + ', ' + u.FirstName AS Member ,DateJoined,ParentID,u2.LastName + ', ' + u2.FirstName AS Parent,lvl
FROM matrix
INNER JOIN dbo.Users u
ON u.UserID = matrix.UserID
INNER JOIN dbo.Users u2
ON u2.UserID = matrix.ParentID
ORDER BY ParentID
CTE 쿼리는 parentID = 0 레코드를 반환하지 않는 것을 제외하고는 괜찮습니다.
감사...
나는 그것이 올바른지 확인하기 위해 내 게시물을보고 마침내 그것을 알아 냈습니다. 최종 선택 절이 잘못되었습니다.
SELECT matrix.UserID, u.LastName + ', ' + u.FirstName AS Member ,DateJoined,ParentID,u2.LastName + ', ' + u2.FirstName AS Parent,lvl
FROM matrix
INNER JOIN dbo.Users u
ON u.UserID = matrix.UserID
INNER JOIN dbo.Users u2
ON u2.UserID = matrix.ParentID
마지막 INNER JOIN은 ParentID 0에 가입 할 UserID 0이 없기 때문에 LEFT JOIN으로 변경해야합니다.
이것이 재귀 CTE 쿼리를 사용하는 다른 사람에게 도움이되기를 바랍니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다