Lấy số thế hệ?
Trong bài tập này, chúng ta sẽ xem một cây gia phả ngẫu nhiên. Bộ dữ liệu family gồm ba cột: ID, name và ParentID.
Nhiệm vụ của bạn là tính số lượng thế hệ. Bạn sẽ làm điều này bằng cách đếm tất cả các thế hệ bắt đầu từ người có ParentID = 101.
Với nhiệm vụ này, bạn cần tính LEVEL của đệ quy, đại diện cho cấp hiện tại trong hệ phân cấp thế hệ. Sau đó, bạn cần đếm số LEVEL bằng cách dùng COUNT(). Hãy nhớ rằng số cấp độ chính là số thế hệ; ví dụ, đếm được 100 cấp độ nghĩa là bạn đã tìm ra 100 thế hệ.
Bài tập này là một phần của khóa học
Truy vấn phân cấp và đệ quy trong SQL Server
Hướng dẫn bài tập
- Khởi tạo điểm bắt đầu đệ quy bằng cách đặt
ParentIDthành101. - Đặt
LEVELbằng bước đệ quy hiện tại. - Join thành viên anchor vào CTE trên ID của cha và con.
- Dùng
COUNT()để đếm số thế hệ.
Bài tập tương tác thực hành trực tiếp
Hãy thử làm bài tập này bằng cách hoàn thành đoạn mã mẫu này.
WITH children AS (
SELECT
ID,
Name,
ParentID,
0 as LEVEL
FROM family
-- Set the targeted parent as recursion start
WHERE ___ = ___
UNION ALL
SELECT
child.ID,
child.NAME,
child.ParentID,
-- Increment LEVEL by 1 each step
___ + ___
FROM family child
INNER JOIN children
-- Join the anchor query with the CTE
ON child.___ = children.___)
SELECT
-- Count the number of generations
___(___) as Generations
FROM children
OPTION(MAXRECURSION 300);