更新: 我問的問題,因爲結果並不像它是如何執行的?這是在這裏解釋: http://msdn.microsoft.com/en-us/library/ms186243(v=sql.105).aspxCTE查詢的結果未按Level排序,爲什麼?
嗯,我還有一個問題... 如果我不需要相同父母和級別,是否有可能只返回一個父母一次使用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
====== =====================
我正在使用遞歸查詢從層次表中找出所有父項,以查找項目表中的項目;我認爲結果應該是Level,但不是......我知道我可以使用order排序,我只是認爲輸出本身應該按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
您在外部查詢中沒有排序。這意味着SQL Server可以自由地以任何它認爲最有效的順序返回結果。如果你解釋你期望結果如何排序,我們可以向你展示如何用正確的順序修改查詢。 – 2012-07-25 15:05:23
關於如何在沒有明確的'ORDER BY'的情況下返回行,從來沒有保證的順序,永遠不會 – Lamak 2012-07-25 15:06:29
嗯...爲什麼-1?這個問題不應該被提出?這是我第一次使用CTE,... – 2012-07-25 16:24:44