MSSQLを使用して、親の子関係を持つテーブルをトラバースしようとしています。最後の葉まで、適切なインデントされた方法ですべての要素を取得するように、結果セットが必要です。それらにMSSQLの再帰的階層トラバーサル
親項目36は、これらの子供17と18の2人の子供17と18のそれぞれ1人の以上の子を持っている26、42それぞれ
36 - 17
17 - 26
36 - 18
18 - 42
しかし、私の再帰は、データの観点からOK取り組んでいますトラバース、しかし賢明な順序、それは失敗しています。私の再帰クエリは私に次のような出力
36 - 17
36 - 18
17 - 26
18 - 42
を与えるそれから、それらのレベルの子供のそれぞれを横断、記録に格納し、一度にすべてのレベルをもたらします。
Oracleの「connect by prior」は正常に動作しているようですが、MSSQLはありません。私は
WITH SRC (Level, PARITEMID, CHIITEMID) AS
(
SELECT
0 as Level,
PI.pitem_id as PARITEMID,
CI.pitem_id as CHIITEMID
FROM PI, CI JOIN <Condition> where PI.PITEM_ID =
UNION ALL
SELECT
Level + 1,
PI1.pitem_id as PARITEMID,
CI1.pitem_id AS CHIITEMID
FROM PI1, CI1 JOIN <Condition>
)
Select * from SRC
を使用しています何のサンプルを貼り付けています、私はそれを注文して入手SRCに行う必要があるものはあり、または基本的に再帰自体に問題があるのですか?私は次のことを想定して
にすることで、最終的な順序を設定しますが、最終的な結果セットの特定の順序が必要な場合は、 '指定する必要があります。 ORDER BY'である。 'ORDER BY'節がなければ、結果セット内の行は任意の順序で返されます。 –
親子関係です。私が前もって指定できる順序はありません。葉まで各階層を得ることができる実行可能なORDERを提案できますか? – Srikanth
いくつかのサンプルデータを提供する場合は(好ましくは、十二行で十分です)、好ましくは 'CREATE TABLE'と' INSERT'文の形式でクエリの期待される結果、あなたはかなり良い答えを得るでしょう。また、使用するSQL Serverのバージョンのタグを追加すると役立ちます。 –