- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:SQL Server2005再帰クエリについて)
SQL Server2005再帰クエリについて
このQ&Aのポイント
- SQL Server2005で再帰クエリを使用して3階層のデータを取得する方法について教えてください。
- 以下のデータを元に、部下の情報を含む結果を取得したいです。
- どのようなクエリを作成すれば良いでしょうか。アドバイスをお願いします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
通常のCTEでは直前の階層をもとに次の階層のデータを返すという繰り返しになるため、今回の目的の結果にはなりません。 また、最後の2行(部下がいない)は、CTEに外部結合が認められないので出すことができません。 したがって、すべてをアンカーメンバーとして最後の2行は後で付加する方式で考えると以下のようになると思います。 WITH 階層データ AS (SELECT 上司の氏名,氏名,階層,上司の氏名 元の上司, 階層 元の階層 FROM データ WHERE 上司の氏名 IS NOT NULL UNION ALL SELECT d.上司の氏名,d.氏名,d.階層, h.元の上司,h.階層 FROM データ d INNER JOIN 階層データ h ON h.氏名=d.上司の氏名) SELECT 元の上司,氏名 FROM (SELECT 元の上司,氏名,元の階層,階層 FROM 階層データ UNION ALL SELECT 氏名,NULL,階層+1,階層+1 FROM データ WHERE 氏名 NOT IN (SELECT ISNULL(上司の氏名,'') FROM データ) ) tmp ORDER BY 元の階層,階層
お礼
回答ありがとうございます。 クエリを理解するのに少し時間がかかりそうです。実際にクエリを実行してみて、仕組みを理解できるようにしたいと思います。取り急ぎお礼させていただきます。