Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Truy vấn con / cha đệ quy trong T / SQL

Bạn cũng sẽ cần đệ quy của mình để xây dựng một thứ gì đó có thể được sắp xếp theo sau:

declare @t TABLE (
[CHILD] [int] NOT NULL,
[PARENT] [int] NOT NULL
) 

insert @t values
( 0, -1),   -- I added this
( 1, 2 ),
( 2, 0 ),
( 3, 1 ),
( 4, 2 ),
( 5, 0 )

(lưu ý rằng tôi đã thêm một phần tử gốc thực sự)

;with n(CHILD, PARENT, GENERATION, hierarchy) as (
select CHILD, PARENT,0, CAST(CHILD as nvarchar) as GENERATION from @t
where PARENT=-1
union all
select nplus1.CHILD, nplus1.PARENT, GENERATION+1, 
cast(n.hierarchy + '.' + CAST(nplus1.child as nvarchar) as nvarchar)
 from 
@t as nplus1 inner join n on nplus1.PARENT=n.CHILD 
)
select CHILD,GENERATION
from n
order by hierarchy

lợi nhuận

CHILD       GENERATION
----------- -----------
0           0
2           1
1           2
3           3
4           2
5           1

Bao gồm hierarchy để minh họa:

CHILD       GENERATION  hierarchy
----------- ----------- ------------------------------
0           0           0
2           1           0.2
1           2           0.2.1
3           3           0.2.1.3
4           2           0.2.4
5           1           0.5

Tùy thuộc vào kích thước id của bạn nhận được, bạn có thể phải thực hiện các thao tác với phần đệm bên trái với các số 0 để sắp xếp đúng.

Lưu ý rằng SQL 2008 có hierarchy tích hợp sẵn nhập cho loại điều này ...



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Trường hợp trong Tuyên bố Chọn

  2. ĐẶT HÀNG BẰNG ... COLLATE trong SQL Server

  3. TSQL ĐỂ KHAI THÁC XML

  4. Spotlight Cloud Basic:Công cụ giám sát hiệu suất cơ sở dữ liệu miễn phí tốt nhất

  5. Bảng và trục nối máy chủ SQL