เริ่มต้นใช้งานเริ่มต้นใช้งานได้ฟรี

นับจำนวนรุ่น (Generation)

ในแบบฝึกหัดนี้ เราจะมาดูแผนภูมิครอบครัวแบบสุ่มกัน ชุดข้อมูล family ประกอบด้วย 3 คอลัมน์ ได้แก่ ID, name และ ParentID โจทย์คือให้คำนวณจำนวนรุ่น (generation) โดยนับทุกรุ่นที่เริ่มต้นจากบุคคลที่มี ParentID = 101

สำหรับงานนี้ ต้องคำนวณค่า LEVEL ของ recursion ซึ่งแทนระดับปัจจุบันในลำดับชั้นของรุ่น จากนั้นนับจำนวน LEVEL ทั้งหมดโดยใช้ COUNT() โดยจำนวน level ที่นับได้คือจำนวนรุ่นทั้งหมด เช่น ถ้านับได้ 100 level หมายความว่าพบ 100 รุ่น

แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร

Hierarchical and Recursive Queries in SQL Server

ดูคอร์ส

คำแนะนำการฝึกหัด

  • กำหนดจุดเริ่มต้นของ recursion โดยตั้งค่า ParentID เป็น 101
  • กำหนด LEVEL ให้แทนขั้นตอนปัจจุบันของ recursion
  • JOIN anchor member เข้ากับ CTE บน ID ของ parent และ child
  • ใช้ COUNT() นับจำนวนรุ่นทั้งหมด

แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ

ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์

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);
แก้ไขและรันโค้ด