if sql 2005 use recursive cte approach like below;With Category_CTE (CatID,CatName,ParentID,ParentName)AS(SELECT cat_id, cat_name, cat_parent_id, cat_parent_nameFROM YourTableWHERE cat_parent_id IS NULLUNION ALLSELECT c.CatID,c.CatName,c.ParentID,c.ParentNameFROM YourTable tINNER JOIN Category_CTE cON c.CatID=t.cat_parent_id)SELECT * FROM Category_CTE
and if sql 2000 refer below linkhttp://support.microsoft.com/kb/248915