找到满足条件sql server的第一个父级

时间:2011-11-21 16:26:24

标签: sql-server-2005 recursion parent-child hierarchy common-table-expression

所以我面临一个棘手的问题,至少对我而言。

想象一下,我正在使用包含分支,区域等的不那么虚构的层次结构数据。我有一些代码消耗了存储过程中的数据,但最近出现了一个循环问题。< / p>

让您了解我的程序所消耗的数据:

Branch 12K3 Parent 12K
Branch 12K2 Parent 12K
Branch 12K  Parent REGION AA123
....

我的工作是创建新节点并从上面的数据中分配适当的父节点。有点像下面。

CPX Node 1 Parent REGION AA456
CPX Node 2 Parent REGION SomeOtherRegion
CPX Node 3 Parent 12K2
CPX Node 4 Parent 12K

注意我有两个父节点恰好是分支的节点。这是不可取的。

目标:对于父级为分支的任何CPX节点,请向上遍历层次结构,直到找到恰好是区域的第一个节点。

所以在这种情况下我的节点应该是这样的

CPX Node 1 Parent REGION AA456
CPX Node 2 Parent REGION SomeOtherRegion
CPX Node 3 Parent AA123 -- previously 12K2
CPX Node 4 Parent AA123 -- previously 12K

我在2005年的整个递归CTE事情上都是新手,所以我天真地尝试过这个:

;with cte as
(
    -- initialization -- don't worry, this just checks for a cycle condition
    select t1.SourceID, t1.SourceParentID
    from @someTable t1
    inner join @someTable t2
    on t1.SourceID = t2.SourceParentID
    and t2.SourceID = t1.SourceParentID

    union all

    -- recursive execution
    select p.SourceID, gp.SourceParentID
    from cte p
    inner join entities as gp with (nolock)
    on gp.SourceID = p.SourceParentID
)
select * from cte

这会起作用,但递归永远不会终止。如果有比我更多经验的人能告诉我我做错了什么,我真的很感激!

输出我的SQL:

IMG1

0 个答案:

没有答案