รวม Parent ทั้งหมดที่เป็นไปได้ไว้ในฟิลด์เดียว
โจทย์สุดท้ายของบทนี้คือการค้นหา Parent ทั้งหมดที่เป็นไปได้โดยเริ่มจาก ID หนึ่ง แล้วรวม ID ของทุกรุ่นที่พบเข้าไว้ในฟิลด์เดียว
ในการทำเช่นนี้ จะค้นหาสมาชิกทั้งหมดแบบ recursive และเพิ่มข้อมูลดังกล่าวลงในฟิลด์เดียว โดยต้องใช้ operator CAST() เพื่อรวม ID ให้เป็น string
การค้นหาจะเริ่มต้นจาก ID = 290 และในตาราง family มีข้อมูลทั้งหมด 300 รายการ
แบบฝึกหัดนี้เป็นส่วนหนึ่งของหลักสูตร
Hierarchical and Recursive Queries in SQL Server
คำแนะนำการฝึกหัด
- กำหนด
ParentIDของ 290 เป็นจุดเริ่มต้น - หาก
Parent.ID = ''ในการดำเนินการCASEให้ตั้งค่าฟิลด์Parentเป็นParentIDปัจจุบัน - หาก
Parent.ID <> ''ในการดำเนินการCASEให้เพิ่ม Parent ID เข้าไปใน Parent ปัจจุบันในแต่ละรอบของการวนซ้ำ - เลือก
NameและParentจาก CTE ที่กำหนดไว้
แบบฝึกหัดเชิงโต้ตอบแบบลงมือทำ
ลองทำแบบฝึกหัดนี้โดยเติมโค้ดตัวอย่างนี้ให้สมบูรณ์
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 ___;