如何从SQL Server中的多个层次结构行中获取根值

时间:2018-10-12 16:34:38

标签: sql sql-server tsql

我有一个带有“新租户”和“上一个租户”列的表。该表在表中具有当前租户和以前的租户ID,其值如下所示:

enter image description here

我该如何编写SQL来获取属性的第一位根租户(第一占有者),作为以下每条记录的新列

enter image description here

属性中的第一个租户是t0000123,然后是租户t0012345,然后是t0008518,然后是t0020198。因此,所有这些租户的主要居住者为t0000123。同样,对于租户t0020197的另一个财产,第一个租户是t0010672

1 个答案:

答案 0 :(得分:0)

递归CTE应该这样做:

with n (new_tenant, previous_tenant, c_tenant, lvl) as (
  select new_tenant, previous_tenant, previous_tenant, 1 from tenant
  union all
  select n.new_tenant, n.previous_tenant, t.previous_tenant, 1
    from tenant t
    join n on n.new_tenant = t.previous_tenant
),
m (new_tenant, max_lvl) as (
  select new_tenant, max(lvl)
    from n
    group by new_tenant
)
select n.*
  from n
  join m on m.max_lvl = n.lvl