one simple way of doing it ...DECLARE @WebPage TABLE( Page VARCHAR(20), Page_Parent VARCHAR(20))INSERT INTO @WebPageSELECT 'Page1', NULL UNION ALLSELECT 'Pagex', 'Page1' UNION ALLSELECT 'Pagey', 'Page1' UNION ALLSELECT 'Pagez', 'Page1' UNION ALLSELECT 'Pagea', 'Page1' UNION ALLSELECT 'Pagew', 'Page1' UNION ALLSELECT 'Page2', NULL UNION ALLSELECT 'Pageq', 'Page2' UNION ALLSELECT 'Pager', 'Page2' UNION ALLSELECT 'Pagee', 'Page2' UNION ALLSELECT 'Pagek', 'Page2' union allSELECT 'Pageaa', 'Pagea'; WITH WebPage as( Select Page, Page_Parent, row_id = row_number() over (order by Page) from @WebPage),cte(Page, Sort)AS( --anchor SELECT Page, Sort = convert(varchar(max), right('00000' + convert(varchar(10), row_id), 5)) FROM WebPage WHERE Page_Parent IS NULL UNION ALL --recursive SELECT w.Page, Sort = convert(varchar(max), c.Sort + right('00000' + convert(varchar(10), w.row_id), 5)) FROM WebPage w INNER JOIN cte c on w.Page_Parent=c.Page WHERE Page_Parent IS NOT NULL)SELECT Page, SortFROM cteorder by Sort
KH[spoiler]Time is always against us[/spoiler]