Насколько я понимаю, вам нужно отсортировать по названию корневых продуктов, а между ними показать субпродукты, упорядоченные по названию, а между ними показать их субпродукты и т. Д.
Полагаю, вы используете рекурсивный cte.Вы можете определить помощника "сортировки иерархии", который является дополненным числом в текущем уровне, и для каждого уровня в глубину, добавить суффикс с дополненным числом в текущем уровне и т. Д.
Что-то вроде этого:
declare @Products table(ID int, Parent_ID int, ProductTitle varchar(100))
insert into @Products values
(1, NULL, 'ADONIS'),
(2, NULL, 'BACARAT'),
(3, 1, 'Portal Module'),
(4, 1, 'Alhambra'),
(5, NULL, 'ZULU'),
(6, 2, 'Omega')
; with cte as (
select ID, Parent_ID, ProductTitle, FORMAT(ROW_NUMBER() over(order by ProductTitle), '0000') as SortingHelper
from @Products
where Parent_ID is null
union all
select p.ID, p.Parent_ID, p.ProductTitle, cte.SortingHelper + '.' + FORMAT(ROW_NUMBER() over(order by p.ProductTitle), '0000') as SortingHelper
from @Products p
inner join cte on cte.ID = p.Parent_ID
)
select ID, Parent_ID, ProductTitle
from cte
order by SortingHelper