Имеется таблица с самообращением
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
Мне нужен спрок, чтобы взять 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, но мне интересно, есть ли лучший / более быстрый подход.