sql >> Database teknologi >  >> RDS >> Sqlserver

SQL Server-funktion til at få øverste niveau forælder i hierarki

Med rekursiv cte, der går fra top til børn:

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

For data:

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)

det genererer output:

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

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



  1. Sporing på kolonneniveau og rækkeniveau i fletningsreplikering

  2. Hvordan påvirker storage-backend Datomic?

  3. konvertering af tidsstempel til dato i java

  4. Golang RESTful API-belastningstest forårsager for mange databaseforbindelser