sql >> Databáze >  >> RDS >> Sqlserver

Funkce SQL Server pro získání nadřazeného prvku nejvyšší úrovně v hierarchii

S rekurzivním cte jdoucím shora k potomkům:

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

Pro 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)

generuje výstup:

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. Získejte objekty objektů v jednom dotazu v kolejích

  2. Otázka týkající se SQL Server

  3. kontingenční tabulka Oracle - jak změnit položky řádků na sloupce

  4. Kdy je Class.forName potřeba při připojování k databázi přes JDBC ve webové aplikaci?