Se assumiamo solo 1 livello di gerarchia. Se più livelli di gerarchia diventa più interessante.
SELECT A.Value+coalesce(B.Value,0) as Value
, A.Position
, A.Relates_to_Position
, A.Type
FROM Table A
LEFT JOIN Table B
on B.Relates_To_Position = A.Position
WHERE A. Relate_to_Position is null
Ciò che fa è un self join, quindi inserisce i record correlati sulla stessa riga. quindi elimina tutti quei record con un valore in relative_to_position poiché verranno aggiunti a una riga padre.
usiamo un join LEFT perché non tutti i record avranno un valore correlato e usiamo la coalesce per garantire che non si tenti di aggiungere null. (coalesce prende il primo valore non nullo)
Non sono sicuro del motivo per cui è necessario che related_To_Position venga restituito poiché sarà SEMPRE nullo..