ParentIdを使用して自分自身に結合するナビゲーション付きのテーブルがあります。各レコードの子孫の数を計算しようとしています。再帰でカウンターをインクリメントする必要があることはわかっていますが、どうすればよいかわかりません。
どんな助けでも大歓迎です!
CREATE TABLE [dbo].[Navigation](
[Id] [int] IDENTITY(1,1) NOT NULL,
[AnchorText] [varchar](50) NOT NULL,
[ParentID] [int] NULL)
insert into Navigation
select 'Level 1', null
union
select 'Level 2', 1
union
select 'Level 3', 2
union
select 'Level 4', 3
WITH NavigationCTE (Id, AnchorText, ParentId, NumberofDescendants) as
(
Select Id, AnchorText, ParentId, 'Number of Descendants Here' as NumberofDescendants
from dbo.Navigation nav
union ALL
select nav.Id, nav.AnchorText, nav.ParentId, 'Number of Descendants Here' as NumberofDescendants
from dbo.Navigation nav
join Navigation ON nav.ParentId = nav.Id
)
SELECT * FROM NavigationCTE
追加されたレベルを編集し、再帰的にインクリメントします:
WITH NavigationCTE (Id, AnchorText, ParentId, Level) as
(
Select nav.Id, nav.AnchorText, nav.ParentId, 0 as Level
from dbo.Navigation AS nav
UNION ALL
select nav.Id, nav.AnchorText, nav.ParentId, Level + 1
from dbo.Navigation AS nav
join Navigation AS nav2 ON nav.ParentId = nav2.Id
)
SELECT * FROM NavigationCTE