SELECT *
INTO # FROM (
SELECT 'A' A,'B' B UNION 
SELECT 'B','C' UNION 
SELECT 'C','D' UNION
SELECT 'E','F' UNION 
SELECT 'F','G'  
 
)Z
 
;WITH Cte
AS(
SELECT *,[Level]=0 FROM # AS a WHERE NOT EXISTS(SELECT 1 FROM # WHERE B=a.A)
UNION ALL
SELECT a.*,[Level]=b.[Level]+1 FROM # AS a INNER JOIN Cte AS b ON b.B=a.A
)
SELECT * FROM Cte ORDER BY 1
/*
A B 0
B C 1
C D 2
E F 0
F G 1*/