Гледайки Олимпиадата -- току-що прегледах набързо публикацията ви -- изглежда, че искате да контролирате сортирането на всяко ниво (корен и едно ниво в) и да се уверите, че данните се връщат с дъщерните елементи директно под родителя (така че можете да страницата на данни...). Ние правим това през цялото време. Можете да добавите order by
към всяка вътрешна заявка и създайте sort
колона. Измислих малко по-различен пример, който би трябвало лесно да приложите към вашите обстоятелства. Сортирах корена възходящо и ниво едно низходящо само за да илюстрирам как можете да контролирате всяка част.
declare @tbl table (id int, parent int, name varchar(10))
insert into @tbl (id, parent, name)
values (1, null, 'def'), (2, 1, 'this'), (3, 1, 'is'), (4, 1, 'a'), (5, 1, 'test'),
(6, null, 'abc'), (7, 6, 'this'), (8, 6, 'is'), (9, 6, 'another'), (10, 6, 'test')
;with cte (id, parent, name, sort) as (
select id, parent, name, cast(right('0000' + cast(row_number() over (order by name) as varchar(4)), 4) as varchar(1024))
from @tbl
where parent is null
union all
select t.id, t.parent, t.name, cast(cte.sort + right('0000' + cast(row_number() over (order by t.name desc) as varchar(4)), 4) as varchar(1024))
from @tbl t inner join cte on t.parent = cte.id
)
select * from cte
order by sort
Това води до следните резултати:
id parent name sort
---- -------- ------- ----------
6 NULL abc 0001
7 6 this 00010001
10 6 test 00010002
8 6 is 00010003
9 6 another 00010004
1 NULL def 0002
2 1 this 00020001
5 1 test 00020002
3 1 is 00020003
4 1 a 00020004
Можете да видите, че основните възли са сортирани възходящо, а вътрешните възли са сортирани низходящо.