• WITH CTE_BSI(ID, VAL)

    AS

    (

    SELECT ID, VALUE FROM TempA AS A

    UNION ALL

    SELECT t.ID,(c.val - value) FROM TempB T join CTE_BSI C on T.parent = c.Id

    )

    SELECT ID, VAL FROM CTE_BSI