sql >> Databasteknik >  >> RDS >> Sqlserver

Ordna överordnade rader efter datum fallande med underordnade rader ordnade oberoende under varje

Att titta på de olympiska spelen -- precis skummat igenom ditt inlägg -- ser ut som att du vill kontrollera sorteringen på varje nivå (root och en nivå in), och se till att data returneras med barnen direkt under dess förälder (så att du kan bläddra data...). Vi gör det här hela tiden. Du kan lägga till en order by till varje inre fråga och skapa en sort kolumn. Jag kom fram till ett lite annorlunda exempel som borde vara lätt för dig att tillämpa på din omständighet. Jag sorterade roten stigande och nivå ett fallande bara för att illustrera hur du kan kontrollera varje del.

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

Detta ger dessa resultat:

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

Du kan se att rotnoderna är sorterade stigande och de inre noderna är sorterade fallande.




  1. Kontrollera om poster finns i en Postgres-tabell

  2. Använder sp_help_jobschedule i SQL Server

  3. Mysql-fråga söker en sträng i alla kolumner i en tabell

  4. Bevara förälder-barn-relationer när du kopierar hierarkisk data