Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Memesan baris induk berdasarkan tanggal turun dengan baris anak dipesan secara independen di bawah masing-masing

Menonton Olimpiade -- baca sekilas postingan Anda -- sepertinya Anda ingin mengontrol pengurutan di setiap level (root dan satu level ke dalam), dan pastikan data dikembalikan dengan anak-anak langsung di bawah induknya (sehingga Anda dapat membuka halaman data...). Kami melakukan ini sepanjang waktu. Anda dapat menambahkan order by ke setiap kueri dalam dan buat sort kolom. Saya membuat contoh yang sedikit berbeda yang seharusnya mudah untuk Anda terapkan pada keadaan Anda. Saya mengurutkan root naik dan turun level satu hanya untuk mengilustrasikan bagaimana Anda dapat mengontrol setiap bagian.

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

Ini menghasilkan hasil berikut:

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

Anda dapat melihat bahwa simpul akar diurutkan naik dan simpul dalam diurutkan turun.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat mengubah kata sandi sa di SQL Server 2008

  2. cara menetapkan nilai cte ke variabel

  3. Cara menulis nama atribut ke kueri pemilihan secara dinamis

  4. SQL-Server 2008 R2 geoSpatial query error untuk Circular String

  5. Membuat Tabel yang Dipartisi di SQL Server (T-SQL)