更新:我问了这个问题,因为结果看起来不像它是如何执行的......这在这里解释:http: //msdn.microsoft.com/en-us/library/ms186243(v=sql.105)。 aspx
好吧,我还有另一个问题...如果我不需要相同的父母和级别,是否可以使用 CTE(而不是之后的选择)或其他一些 sql 只返回一次父母?
============================ 期望的结果是这样的:
......
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
============================
我正在使用递归查询从 Hierarchy 表中查找所有父项,以获取 Items 表中的项目;我认为结果应该是 Level,但它不是......我知道我可以使用 order by 对其进行排序,我只是认为输出本身应该按 Level 排序,因为 Recursive Memeber 是由 Level 运行的,对吗?
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