获取父子表中子项的父ID?

时间:2017-08-25 13:25:54

标签: sql

我有一个excel表,其中包含每个节点的ID,NodeType,ParentName和Depth。

我想使用SQL中的深度获取所有NodeType的相应父ID。

有人可以帮忙吗?

样本表:

Id  Node    Parent  Depth
1   a       NULL    0
2   b       a       1
3   c       a       1
4   d       b       2 
5   e       b       2
6   f       c       2
7   g       c       2

预期结果:获取每个节点的父ID。

Id  Node    Parent  Depth  Parent Id
1   a       NULL    0 
2   b       a       1
3   c       a       1
4   d       b       2 
5   e       b       2
6   f       c       2
7   g       c       2

1 个答案:

答案 0 :(得分:0)

您可以使用CTE解决问题:

准备环境:

create table AnyTable (
    Id int identity(1,1) not null
    , [Node] varchar(max) not null 
    , [Parent] varchar(max) null 
    , [Depth] int not null 
)

insert AnyTable 
select 'a', null, 0
union 
select 'b', 'a', 1
union 
select 'c', 'a', 1
union 
select 'd', 'b', 2
union 
select 'e', 'b', 2
union 
select 'f', 'c', 2
union 
select 'g', 'c', 2

CTE查询示例:

;with cteRecursive as (
    select Id, [Node], [Parent], [Depth], null [ParentId]
    from 
        AnyTable
    where 
        [Parent] is null
    union all
    select a.Id, a.[Node], a.[Parent], a.[Depth], c.[Id] [ParentId]
    from 
        AnyTable a 
        join cteRecursive c 
            on a.[Parent] = c.[Node]
)
select 
    * 
from 
    cteRecursive