始める無料で始める

すべての親候補を1つのフィールドにまとめるには?

この章の最後のタスクでは、ある1つのIDからたどれるすべての親を見つけ、見つかった各世代のIDを1つのフィールドに結合します。

そのために、再帰的にすべての該当メンバーを探索し、その情報を1つのフィールドに追加していきます。ID を文字列として結合するために CAST() 演算子を使う必要があります。 ID = 290 を起点に、すべての家族メンバーを検索します。テーブル family には合計で300件のレコードがあります。

この演習はコースの一部です

SQL Server における階層型クエリと再帰クエリ

コースを見る

演習の手順

  • 起点として 290 の ParentID を設定します。
  • CASE の処理で Parent.ID = '' の場合、Parent フィールドは現在の ParentID に設定します。
  • CASE の処理で Parent.ID <> '' の場合、各反復で現在の Parent に親IDを追加します。
  • 定義した 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 ___;
コードを編集して実行