【问题标题】:How to get root value from multiple hierarchical rows in SQL Server [duplicate]如何从 SQL Server 中的多个分层行中获取根值 [重复]
【发布时间】:2019-03-17 22:18:30
【问题描述】:

我有一个包含“新租户”和“以前的租户”列的表格。此表在一个表中有当前租户和以前的租户 ID,其值如下

我如何编写 SQL 来获取属性的第一个根租户(第一个占用者)作为每个记录的新列,如下所示

物业中的第一个租户是 t0000123,然后租户 t0012345 移动,然后 t0008518 移动,然后 t0020198。所以所有这些租户的主要居住者是 t0000123 。同样,对于租户 t0020197 的另一个属性,第一个租户是 t0010672

【问题讨论】:

  • 这看起来像是递归公用表表达式 (CTE) 的作业。你试过什么?提示:不使用图片的原因是here

标签: sql sql-server tsql


【解决方案1】:

递归 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    

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    • 2016-03-03
    • 2021-11-04
    相关资源
    最近更新 更多