查看递归表SQL上的级别编号

Ham*_*teu 4 sql t-sql sql-server-2014

我有下表:

--------------------------------------------
ID      ParentID     Item  
--------------------------------------------
1                    root
2       1            AA
3       1            BB
4       1            CC
5       1            DD
6       2            A1
7       6            A11
ff.
Run Code Online (Sandbox Code Playgroud)

我希望得到以下结果:

ID      ParentID     Item         Level
---------------------------------------------
1                    root         0
2       1            AA           1
3       1            BB           1
4       1            CC           1
5       1            DD           1
6       2            A1           2
7       6            A11          3
ff.
Run Code Online (Sandbox Code Playgroud)
  1. 创建新列的最佳想法是什么level?是创建一个新列并添加一个公式或类似计算或可能的函数?
  2. 我怎样才能实现这一目标t-sql

谢谢.

Gor*_*off 6

您将使用递归CTE:

with cte as (
      select t.id, t.parentid, t.item, 0 as lvl
      from t
      where parentid is null
      union all
      select t.id, t.parentid, t.item, cte.lvl + 1 as lvl
      from t join
           cte
           on t.parentid = cte.id
     )
select *
from cte;
Run Code Online (Sandbox Code Playgroud)

将这些数据存储在表中是...麻烦,因为你需要保持更新.您可能希望在需要时即时计算它.