sql >> Database >  >> RDS >> Sqlserver

Bovenliggende rijen ordenen op datum aflopend met onderliggende rijen die onafhankelijk onder elkaar zijn gerangschikt

Als je naar de Olympische Spelen kijkt -- heb je bericht even geskimd -- lijkt het alsof je de sortering op elk niveau (root en één niveau in) wilt regelen en ervoor wilt zorgen dat de gegevens worden geretourneerd met de kinderen direct onder de bovenliggende (zodat je de pagina gegevens...). We doen dit de hele tijd. U kunt een order by op elke innerlijke query en maak een sort kolom. Ik heb een iets ander voorbeeld bedacht dat gemakkelijk voor u zou moeten zijn om op uw situatie toe te passen. Ik heb de wortel oplopend gesorteerd en niveau één aflopend om te illustreren hoe je elk onderdeel kunt besturen.

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

Dit levert de volgende resultaten op:

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

U kunt zien dat de hoofdknooppunten oplopend zijn gesorteerd en de binnenste knooppunten aflopend.




  1. Ongewenste nieuwe regels bij het spoolen van een sqlplus-resultaat naar een xml-bestand

  2. foutquery mysql op pentaho data-integratie (cdb)

  3. MySQL-fout 10061

  4. Verbinding maken mislukt:php_network_getaddresses:getaddrinfo mislukt:naam of service niet bekend