WITH tbl (E_ID , PARENTID) AS ( SELECT 1, NULL UNION ALL SELECT 2, 1 UNION ALL SELECT 3, 2 UNION ALL SELECT 4, 2 UNION ALL SELECT 5, NULL UNION ALL SELECT 6, 5 UNION ALL SELECT 7, 5 UNION ALL SELECT 8, 7 ) , tmpT (FirstID , E_ID , PARENTID) AS ( SELECT E_ID , E_ID , PARENTID FROM tbl WHERE PARENTID IS NULL UNION ALL SELECT A.FirstID , R.E_ID , R.PARENTID FROM tmpT A JOIN tbl R ON A.E_ID = R.PARENTID ) SELECT FirstID , E_ID , PARENTID FROM tmpT ORDER BY FirstID , E_ID