用于获取层次结构中的顶级父级的 SQL Server 函数

标签 sql sql-server sql-server-2012

我有下表(master_group)结构:

code    name                      under 

1       National Sales Manager    1
2       regional sales manager    1 
3       area sales manager        2 
4       sales manager             3

如何获得特定行的最终父级,例如:
code    name                      under     ultimateparent

1       National Sales Manager    1         1
2       regional sales manager    1         1
3       area sales manager        2         1
4       sales manager             3         1

最佳答案

随着递归 cte 从上到下:

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

对于数据:
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)

它生成输出:
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

关于用于获取层次结构中的顶级父级的 SQL Server 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30286834/

相关文章:

mysql - 使用 select 语句更新动态列值

sql-server - 在 SQL Server 中更改数据库排序规则的风险和影响

php - 比较 PHP 和 MYSQL 中的日期

sql - 使用 MERGE 语句时输出不同?

sql - 使用 PostgreSQL 计算和添加在特定日期出现的不同值

sql - 如何在 PostgreSQL 中的单个查询中插入多行

mysql - 如何将bak文件转换成sql文件(支持sql bak文件转mysql)并执行该文件自动恢复

sql - SQL Service Broker:收集数据-插件方案分析

sql-server - SQL 内存使用情况

sql - Sql 中的分组依据和联合