sql >> Database >  >> RDS >> Sqlserver

SQL Server-functie om bovenliggend niveau in hiërarchie te krijgen

Met recursieve cte die van boven naar kinderen gaat:

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

Voor gegevens:

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)

het genereert de 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

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



  1. PHP &MySQL vergelijken wachtwoord

  2. MySQL toevoegtekenreeks

  3. Wat is er mis met deze SQL DELETE FROM-syntaxis?

  4. Laravel 5.2 - Gebruik een string als aangepaste primaire sleutel voor welsprekende tabel wordt 0