2017-08-25 25 views
0

私は、各ノードのID、NodeType、ParentName、およびDepthを含むExcelテーブルを持っています。親子テーブルの子の親IDを取得しますか?

私はSQLでの深さを使用して、すべてのノードタイプのための対応する親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 

答えて

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 
+0

あなたはCTEのクエリAを説明してもらえますビット? – Archana

+1

CTEは一般的なテーブル式ですが、テンポラリテーブルのような特定のクエリに対して別のスコープを作成する必要がある場合に使用しますが、大きなトピックで説明すると、[こちら]/pt-br/sql/t-sql/queries/with-common-table-expression-transact-sql) –

+0

ありがとうございました。 – Archana

関連する問題