1

次のテーブル構造があるとします。

CREATE TABLE [dbo].[NodeTest] (
[Id]             INT            IDENTITY (1, 1) NOT NULL,
[NodeCode]       NVARCHAR (50)  NOT NULL,
[ParentNodeCode] NVARCHAR (50)  NULL,
[NodeName]       NVARCHAR (255) NULL,
PRIMARY KEY CLUSTERED ([Id] ASC)
);

そして、次のデータ:

insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('0', null, 'ROOT')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('01', '0', '01')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('02', '0', '02')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('03', '0', '03')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('011', '01', '011')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('012', '01', '012')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('021', '02', '021')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('022', '02', '022')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('023', '02', '023')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('024', '02', '024')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('025', '02', '025')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('031', '03', '031')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('032', '03', '032')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('0111', '011', '0111')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('0112', '011', '0112')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('0311', '031', '0311')
insert into NodeTest(NodeCode, ParentNodeCode, NodeName) values('0322', '032', '0322')

ノードをすべての子孫とともにリストするビューを作成するにはどうすればよいですか? たとえば、ノード 01 の場合、次のようになります。

01 011
01 012
01 0111
01 0112

上記のテーブルと情報を含むこのSQLFiddleを使用します。

4

4 に答える 4

3

作業中の SQLFiddle

私はあなたがこれを望んでいると思います

with cte as 
    (
        select * from NodeTest where ParentNodeCode = '01'
        union all
        select NodeTest.* 
        from NodeTest
        inner join cte  on cte.NodeCode = NodeTest.ParentNodeCode
    )
    select * from cte;
于 2013-10-11T09:45:43.650 に答える
2

共通テーブル式 (CTE) の使用

declare @parentCode varchar(20) = '01'

;with cte as 
(
    select * from NodeTest where ParentNodeCode = @parentCode
    union all
    select NodeTest.* 
    from NodeTest
         inner join cte on cte.NodeCode = nodeTest.ParentNodeCode
)
select @parentCode, nodeCode from cte;
于 2013-10-11T09:50:30.340 に答える
0

これはうまくいきます

a.NodeCode,b.NodeName を NodeTest から選択 a 内部結合 NodeTest b on a.NodeName = b.ParentNodeCode

于 2013-10-22T10:31:06.790 に答える