Sledování olympijských her – jen prolétl váš příspěvek – vypadá, že chcete ovládat řazení na každé úrovni (kořen a jedna úroveň) a zajistit, aby se data vracela s dětmi přímo pod jejich nadřazeným prvkem (takže můžete stránku data...). Děláme to pořád. Můžete přidat order by
na každý vnitřní dotaz a vytvořte sort
sloupec. Vymyslel jsem trochu jiný příklad, který by pro vás mělo být snadné aplikovat na vaši situaci. Seřadil jsem kořen vzestupně a první úroveň sestupně, jen abych ilustroval, jak můžete ovládat jednotlivé části.
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
Výsledkem jsou tyto výsledky:
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
Můžete vidět, že kořenové uzly jsou seřazeny vzestupně a vnitřní uzly jsou seřazeny sestupně.