63648


Microsoft SQL Server 2012を使用しています。  
良いクエリ式が書けず、困っているため、ご協力いただきたいです。

以下のようなテーブルがあるとします。  
ID列とParentID列が親子関係を示しており、ツリーを形成しています。  
ツリーのルートに当たるものはParentIDがNULLです。  
各IDにはParameterIDを持っています。

[![画像の説明をここに入力](https://i.stack.imgur.com/F2hzh.png)](https://i.stack.imgur.com/F2hzh.png)

このようなテーブル構造を前提に次のようなSELECT文を取得したいです。

  * 自身が親なら自身のParameterIDのみ取得
  * 自身が子ならば自身と親のParameterIDを取得
  * 自身が孫ならば自身と親とそのまた親のParameterIDを取得 ...  
[![画像の説明をここに入力](https://i.stack.imgur.com/vhzku.png)](https://i.stack.imgur.com/vhzku.png)

このような結果を取得するためのクエリをどのように記載すればよいか  
ご協力いただきたいです。


CC BY-SA 4.0
2020-03-07T01:08:56.577
63638
2020-03-07T08:35:46.573
12388
question
sql
SQL Server 再帰処理


[再帰共通テーブル式](https://docs.microsoft.com/ja-jp/sql/t-sql/queries/with-common-
table-expression-transact-sql?view=sql-server-ver15#guidelines-for-defining-
and-using-recursive-common-table-expressions)を使ってこんな感じですかね。

[code]

    WITH CTE
    AS (
      SELECT ID, ParameterID
      FROM T
      UNION ALL
      SELECT T.ID, CTE.ParameterID
      FROM T
      INNER JOIN CTE ON T.ParentID=CTE.ID
    )
    SELECT DISTINCT ID, ParameterID
    FROM CTE
    ORDER BY ID;
    
[/code]


CC BY-SA 4.0
2020-03-07T08:35:46.573
63648
2020-03-07T08:35:46.573
4236
63638
answer