0

次のようなツリー構造のテーブルがあります。

Id  Desc  ParentID
===
A    DescrA   NULL
B    DescrB   A
C    DescrC   A
D    DescrD   C
E    DescrE   C
F    DescrF   E

次のような特定の ID の子孫 (下位子孫を含む) の数を返すクエリが必要です。

select count(descendants) from Tablex where id='A' --result = 5
select count(descendants) from Tablex where id='B' --result = 0
select count(descendants) from Tablex where id='C' --result = 3
select count(descendants) from Tablex where id='E' --result = 1

CTEで「簡単に」作成できることを見てきましたが、その要点を理解できませんでした...

4

1 に答える 1

2
declare @T table
(
  Id char(1),
  ParentId char(1)
);

insert into @T values
('A', NULL),
('B', 'A'),
('C', 'A'),
('D', 'C'),
('E', 'C'),
('F', 'E');

declare @ParentId char(1);
set @ParentId = 'A';

with C as
(
  select Id, ParentId
  from @T
  where ParentId = @ParentId
  union all
  select T.Id, T.ParentId
  from @T as T
    inner join C
      on T.ParentId = C.Id
)
select count(*)
from C;
于 2012-06-14T08:13:13.537 に答える