• Here is my code, reformatted the way I like to it.

    with rCTE as (

    select

    t1.retained,

    t1.dropped,

    t1.retained as TopLevel

    from

    dbo.testing t1

    left outer join dbo.testing t2

    on t1.retained = t2.dropped

    where

    t2.dropped is null

    union all

    select

    t1.retained,

    t1.dropped,

    r.TopLevel

    from

    dbo.testing t1

    inner join rCTE r

    on t1.retained = r.dropped)

    update tu set

    retained = r.TopLevel

    from

    dbo.testing tu

    inner join rCTE r

    on tu.retained = r.retained and

    tu.dropped = r.dropped;