把所有可能的父系路徑合併在同一欄?
在本章最後一個任務中,你要從單一 ID 出發找出所有可能的父系成員,並將各世代的 ID 合併到同一個欄位中。
為此,你會用遞迴的方式搜尋所有可能的成員,並把結果累加到同一個欄位。你需要使用 CAST() 運算子把多個 ID 串成字串。
你將從 ID = 290 開始搜尋所有家族成員。資料表 family 總共有 300 筆紀錄。
本練習屬於課程
SQL Server 的階層式與遞迴查詢
練習說明
- 將 290 的
ParentID設為起點。 - 在
CASE操作中,若Parent.ID = '',則將Parent欄位設為目前的ParentID。 - 在
CASE操作中,若Parent.ID <> '',則在每次遞迭時把該ParentID加到目前的Parent後面。 - 從已定義的 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 ___;