Дана таблица самоссылки
Item
-------------
Id (pk)
ParentId (fk)
Со связанной таблицей связанных значений
ItemValue
-------------
ItemId (fk)
Amount
И некоторые примерные данные
Item ItemValues
Id ParentId ItemId Amount
-------------------- ----------------------
1 null 1 10
2 1 3 40
3 1 3 20
4 2 4 10
5 2 5 30
6 null
7 6
8 7
Мне нужен sproc, чтобы взять Item.Id
и вернуть прямых дочерних элементов с суммами всех ItemValue.Amounts
для них, их дочерних элементов и их дочерних элементов на всем пути вниз по дереву.
Например, если передать 1
, дерево будет 2, 3, 4, 5
прямым потомком будет 2, 3
вывод будет
ItemId Amount
------------------
2 40 (values from ItemIds 4 & 5)
3 60 (values from ItemId 3)
Какие подходы следует применять для достижения такого поведения?
Я рассматриваю возможность использования CTE, но мне интересно, есть ли лучший/быстрый подход.