;with catChild as(select *,cast(right('00000'+cast(Sort as varchar),5) as varchar(max)) as ssort
from Category where ID = '123'
union all select t.*,
cast(ssort+right('00000'+cast(t.Sort as varchar),5) as varchar(max))
from catChild, Category t
where catChild.ID = t.ParentID)
select * from catChild where IsVolumes='1' order by ssort,Sort
;with cte as
(select ID,Name,ParentID,1 level,
cast(right('00000'+cast(Sort as varchar),5) as varchar(max)) as ssort
from Category where ID = '111A'
union all select t.ID,t.Name,t.ParentID,c.level + 1,
cast(ssort+right('00000'+cast(t.Sort as varchar),5) as varchar(max))
from Category t
join cte c on t.ParentID = c.ID)
select ID, Name, ParentID, level,ssort
from cte order by ssort