Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Porządkowanie wierszy nadrzędnych według daty malejąco z wierszami podrzędnymi uporządkowanymi niezależnie pod każdym

Oglądanie igrzysk olimpijskich — po prostu przejrzałem swój post — wygląda na to, że chcesz kontrolować sortowanie na każdym poziomie (główny i jeden poziom do przodu) i upewnij się, że dane są zwracane z dziećmi bezpośrednio pod jego dane...). Robimy to cały czas. Możesz dodać order by do każdego zapytania wewnętrznego i utwórz sort kolumna. Stworzyłem nieco inny przykład, który powinien być dla ciebie łatwy do zastosowania w twojej sytuacji. Posortowałem pierwiastek rosnąco, a poziom pierwszy malejąco, aby zilustrować, jak możesz kontrolować każdą część.

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

Daje to następujące wyniki:

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

Możesz zobaczyć, że węzły główne są posortowane rosnąco, a węzły wewnętrzne są posortowane malejąco.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zaktualizować z SELECT w SQL Server

  2. Praca z danymi Salesforce.com w usługach raportowania SQL Server

  3. Co to jest DATALENGTH() w SQL Server?

  4. Jak utworzyć procedurę składowaną związaną ze schematem w programie SQL Server?

  5. Dynamiczny obrót T-SQL