시작하기무료로 시작하기

모든 가능한 부모를 한 필드에 담아볼까요?

이 장의 마지막 과제는 하나의 ID에서 시작해 가능한 모든 부모를 찾고, 발견한 모든 세대의 ID를 한 필드로 합치는 것입니다.

이를 위해 재귀적으로 모든 가능한 구성원을 탐색하고, 그 정보를 하나의 필드에 누적할 거예요. ID들을 문자열로 결합하려면 CAST() 연산자를 사용해야 합니다. 탐색은 ID = 290에서 시작합니다. 테이블 family에는 총 300개의 레코드가 있습니다.

이 연습은 강의의 일부입니다

SQL Server에서의 계층형 및 재귀 쿼리

강의 보기

연습 안내

  • 시작점으로 ParentID를 290으로 설정하세요.
  • CASE에서 Parent.ID = ''이면, Parent 필드를 현재 ParentID로 설정하세요.
  • CASE에서 Parent.ID <> ''이면, 각 반복에서 현재 Parent 뒤에 Parent ID를 추가하세요.
  • 정의한 CTE에서 NameParent를 선택하세요.

실습형 인터랙티브 연습

이 예제를 이 샘플 코드를 완성하여 풀어보세요.

WITH tree AS (
	SELECT 
  		ID,
  		Name, 
  		ParentID, 
  		CAST('0' AS VARCHAR(MAX)) as Parent
	FROM family
  	-- Initialize the ParentID to 290 
  	WHERE ___ = ___    
    UNION ALL
    SELECT 
  		Next.ID, 
  		Next.Name, 
  		Parent.ID,
    	CAST(CASE WHEN Parent.ID = ''
        	      -- Set the Parent field to the current ParentID
                  THEN(CAST(Next.___ AS VARCHAR(MAX)))
        	 -- Add the ParentID to the current Parent in each iteration
             ELSE(Parent.Parent + ' -> ' + CAST(Next.___ AS VARCHAR(MAX)))
    		 END AS VARCHAR(MAX))
        FROM family AS Next
        	INNER JOIN tree AS Parent 
  			ON Next.ParentID = Parent.ID)
        
-- Select the Name, Parent from tree
SELECT ___, ___
FROM ___;
코드 편집 및 실행