create table Greg ( PageID int, ParentPageID int, Descrip varchar(20) ) insert into Greg values (1,null,'County 1') insert into Greg values (2,1,'C1 Region 1') insert into Greg values (3,1,'C1 Region 2') insert into Greg values (4,2,'C1 R1 Unit 1') insert into Greg values (5,2,'C1 R1 Unit 2') insert into Greg values (6,3,'C1 R2 Unit 1') insert into Greg values (7,null,'County 2') insert into Greg values (8,7,'C2 Region 1') insert into Greg values (9,1,'C1 Region 3') select *, 0 as Level, cast(str(pageid,10) as varchar(8000)) as H into #Temp from Greg where ParentPageID is null declare @lev int set @lev = 0 while @@rowcount > 0 begin set @lev = @lev + 1 insert into #Temp select G.*, @lev, T.H+str(G.pageid,10) from Greg G join #Temp T on G.ParentPageID = T.PageID and T.level = @lev - 1 end select pageid, parentPageid, descrip from #temp order by H go drop table #temp drop table Greg