この構造のテーブルがあります:
Id ParentId CountItems
スクリプトでアイテムのレベルを計算できます。
;WITH cteSort AS
(
SELECT Id AS Child, ParentId AS Parent, 1 AS [Level]
FROM [Catalog].[Category] WHERE Id = 0
union ALL
SELECT Id AS Child, ParentId AS Parent, [Level] + 1 AS [Level]
FROM [Catalog].[Category]
INNER JOIN cteSort ON [Category].ParentId = cteSort.Child and Id <>0)
下のレベルから上に上げて、現在の CountItems に、下のレベルにあるフィールドの CountItems の子と現在の CountItems の合計を入れます。このように:前に
Id ParentId count
0 0 0
1 0 1
2 0 1
3 1 1
4 1 1
5 2 1
6 3 1
7 4 1
8 4 1
後
Id ParentId count
0 0 8
1 0 6
2 0 2
3 1 2
4 1 3
5 2 1
6 3 1
7 4 1
8 4 1