開始使用免費開始

把所有可能的父系路徑合併在同一欄?

在本章最後一個任務中,你要從單一 ID 出發找出所有可能的父系成員,並將各世代的 ID 合併到同一個欄位中。

為此,你會用遞迴的方式搜尋所有可能的成員,並把結果累加到同一個欄位。你需要使用 CAST() 運算子把多個 ID 串成字串。 你將從 ID = 290 開始搜尋所有家族成員。資料表 family 總共有 300 筆紀錄。

本練習屬於課程

SQL Server 的階層式與遞迴查詢

檢視課程

練習說明

  • 將 290 的 ParentID 設為起點。
  • CASE 操作中,若 Parent.ID = '',則將 Parent 欄位設為目前的 ParentID
  • CASE 操作中,若 Parent.ID <> '',則在每次遞迭時把該 ParentID 加到目前的 Parent 後面。
  • 從已定義的 CTE 中選取 NameParent

動手互動練習

試著完成這個範例程式碼,體驗一下這個練習。

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 ___;
編輯並執行程式碼