更新:結果が実行方法のように見えないため、質問しました...ここで説明されています:http: //msdn.microsoft.com/en-us/library/ms186243( v = sql.105)。 aspx
別の質問があります...同じ親とレベルが必要ない場合、CTE(その後の選択ではない)または他のSQLを使用して1つの親を1回だけ返すことは可能ですか?
===========================望ましい結果は次のようになります。
......
54 4
**** the above is anchor member, the numbers are correct
4 1
1 0
2 1
36 35
35 8
8 1
54 12
12 1
11 1
3 1
===========================
再帰クエリを使用して、Itemsテーブルのアイテムについて、階層テーブルからすべての親を検索しています。結果はレベルごとである必要があると思いましたが、そうではありません...順序を使用して並べ替えることができます。再帰メンバーはレベルごとに実行されるため、出力自体はレベルごとに並べ替える必要があると思います。
WITH Result(ItemID, ParentID, Level)
AS
(
--get the anchor member from tbItems
SELECT itemID, itemParentID, 0 AS Level
FROM tbItems WHERE
approved = 0
UNION ALL
--recursive member from tbHierarchy
SELECT h.hierarchyItemID, h.parentItemID, Level + 1
FROM tbHierarchy AS h
INNER JOIN
Result AS r
ON
h.hierarchyItemID = r.ParentID
)
SELECT *
FROM Result
結果は次のとおりです。
ItemID ParentID Level
----------- ----------- -----------
7 3 0
11 2 0
18 11 0
19 11 0
21 54 0
31 2 0
33 36 0
34 36 0
35 36 0
36 36 0
38 2 0
39 2 0
40 2 0
54 4 0
**** the above is anchor member, the numbers are correct
4 1 1
1 0 2
2 1 1
1 0 2
2 1 1
1 0 2
2 1 1
1 0 2
36 35 1
35 8 2
8 1 3
1 0 4
36 35 1
35 8 2
8 1 3
1 0 4
36 35 1
35 8 2
8 1 3
1 0 4
36 35 1
35 8 2
8 1 3
1 0 4
2 1 1
1 0 2
54 12 1
12 1 2
1 0 3
11 1 1
1 0 2
11 1 1
1 0 2
2 1 1
1 0 2
3 1 1
1 0 2