簡體   English   中英

SQL遞歸CTE查詢,奇數結果集SQL Server 2005

[英]SQL recursive CTE query, odd results set SQL Server 2005

我試圖在SQL Server 2005中編寫一個遞歸CTE查詢,但結果卻很奇怪。 我的桌子是:

PairID  ChildID ParentID
900        1        2       
901        2        3       
902        3        4       

這是我的CTE查詢:

WITH TESTER (PairID, 
             ChildID, 
             ParentID, 
             Level)
AS (SELECT a.PairID, a.ChildID,a.ParentID, 0 AS Level
    FROM BusinessHierarchy AS a
    UNION ALL
    SELECT b.PairID, b.ChildID, b.ParentID, oh.Level + 1 AS Level
    FROM BusinessHierarchy AS b INNER JOIN
    TESTER AS oh ON b.ChildID =  oh.ParentID)
SELECT 
      x.PairID, 
      x.ChildID,
      x.ParentID,
      x.Level
 FROM TESTER AS x
 ORDER BY x.Level, x.ChildID, x.ParentID

好的,所以我現在得到一個數據集返回,但是,它不按預期方式包含以下方式的重復:

PairID  ChildID ParentID Level
900     1       2        0
901     2       3        0
902     3       4        0
...

900     2       3        1
901     3       4        1
...

900     3       4        2

如果有人可以向我解釋為什么會這樣,以及我將如何糾正它,我將非常感激。

就我的最后一個問題而言,我將如何修改它以與每個父母一起顯示初始childID,如下所示:

Original
PairID  ChildID ParentID Level
900     1       2        0
901     2       3        1
902     3       4        2

I want it displayed as:
PairID  ChildID ParentID Level
900     1       2        0
901     1       3        1
902     1       4        2

您的問題是您的出發點。 CTE查詢的第一部分返回所有行(注意其級別均為0)。

然后-您查詢的下一部分將獲得所有相關行(這將添加到您先前的結果集中)。

但是我確實注意到,您沒有ID為4的記錄

如果您這樣做了,那么您將執行以下操作:

;WITH TESTER (PairID, ChildID, ParentID, Level) AS (
    SELECT
        a.PairID,
        a.ChildID,
        a.ParentID,
        0 AS Level
    FROM BusinessHierarchy AS a
    LEFT JOIN BusinessHierarchy a2 ON a.ParentID = a2.ChildID
    WHERE a2.PairID is null

    UNION ALL

    SELECT
        b.PairID,
        b.ChildID,
        b.ParentID,
        oh.Level + 1 AS Level
    FROM BusinessHierarchy AS b
    INNER JOIN TESTER AS oh ON b.ParentID =  oh.ChildID
)

SELECT 
    x.PairID, 
    x.ChildID,
    x.ParentID,
    x.Level
FROM TESTER AS x
ORDER BY x.Level, x.ChildID, x.ParentID

另外,請參閱我對類似問題的回答,以顯示正確的排序順序(使用路徑)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM