• Hi

    You're very close to getting the result you want, you just need to combine the results of your drill up with a drill down from FTID, rather than drilling down from the TopBaseID

    Something like:

    ;WITH rDrillUp AS (

    SELECT FTIDBase, FTIDCalc, 0 datelevel

    FROM #fieldrels

    WHERE FTIDCalc = 7

    UNION ALL

    SELECT fr.FTIDBase, fr.FTIDCalc, datelevel - 1 -- Down Count

    FROM rDrillUp du

    INNER JOIN #fieldrels fr ON du.FTIDBase = fr.FTIDCalc

    )

    ,rDrillDown AS (

    SELECT FTIDBase, FTIDCalc, 0 datelevel

    FROM #fieldrels

    WHERE FTIDCalc = 7

    UNION ALL

    SELECT fr.FTIDBase, fr.FTIDCalc, datelevel + 1 -- Up Count

    FROM rDrillDown du

    INNER JOIN #fieldrels fr ON fr.FTIDBase = du.FTIDCalc

    )

    ,combined AS (

    SELECT FTIDBase, FTIDCalc, DENSE_RANK() OVER (ORDER BY DateLevel) + 1 DateLevel

    FROM (

    SELECT * FROM rDrillUp

    UNION

    SELECT * FROM rDrillDown

    ) a

    )

    SELECT FTIDBase, FTIDBase FTIDCalc, 1

    FROM combined

    WHERE DateLevel = 2

    UNION ALL

    SELECT FTIDBase, FTIDCalc, DateLevel

    FROM combined