모든 가능한 부모를 한 필드에 담아볼까요?
이 장의 마지막 과제는 하나의 ID에서 시작해 가능한 모든 부모를 찾고, 발견한 모든 세대의 ID를 한 필드로 합치는 것입니다.
이를 위해 재귀적으로 모든 가능한 구성원을 탐색하고, 그 정보를 하나의 필드에 누적할 거예요. ID들을 문자열로 결합하려면 CAST() 연산자를 사용해야 합니다.
탐색은 ID = 290에서 시작합니다. 테이블 family에는 총 300개의 레코드가 있습니다.
이 연습은 강의의 일부입니다
SQL Server에서의 계층형 및 재귀 쿼리
연습 안내
- 시작점으로
ParentID를 290으로 설정하세요. CASE에서Parent.ID = ''이면,Parent필드를 현재ParentID로 설정하세요.CASE에서Parent.ID <> ''이면, 각 반복에서 현재Parent뒤에 Parent ID를 추가하세요.- 정의한 CTE에서
Name과Parent를 선택하세요.
실습형 인터랙티브 연습
이 예제를 이 샘플 코드를 완성하여 풀어보세요.
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 ___;