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

Hàm SQL Server để lấy cấp cao nhất của cấp cha mẹ trong hệ thống phân cấp

Với cte đệ quy đi từ trên xuống đến con:

with cte as(
  select *, code as ultimate from t where code = under
  union all
  select t.*, c.ultimate from t
  join cte c on c.code = t.under
  where t.code <> t.under
)
select * from cte

Đối với dữ liệu:

create table t (code int, name varchar(100), under int)
insert into t values
(1, 'National Sales Manager', 1),
(2, 'regional sales manager', 1),
(3, 'area sales manager', 2),
(4, 'sales manager', 3),
(5, 'a', 5),
(6, 'b', 5),
(7, 'c', 5),
(8, 'd', 7),
(9, 'e', 7),
(10, 'f', 9),
(11, 'g', 9)

nó tạo ra đầu ra:

Tên mã
code    name                    under   ultimate
1       National Sales Manager  1       1
5       a                       5       5
6       b                       5       5
7       c                       5       5
8       d                       7       5
9       e                       7       5
10      f                       9       5
11      g                       9       5
2       regional sales manager  1       1
3       area sales manager      2       1
4       sales manager           3       1

Fiddle http://sqlfiddle.com/#!6/17c12e/1



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để lấy danh sách tên phần tử từ một giá trị XML trong SQL Server

  2. Cách thay đổi mức độ tương thích của cơ sở dữ liệu với T-SQL

  3. cách nhập ip trong máy chủ liên kết truy vấn

  4. Có cách nào để thực hiện một truy vấn khác trong truy vấn chèn không?

  5. Tại sao (và cách) chia cột bằng cách sử dụng master..spt_values?