You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MS SQL 2012层级表:获取每行层级数的SQL实现问询

计算SQL Server树形结构的层级编号

针对你给出的树形结构数据,在SQL Server 2012中可以通过**递归CTE(Common Table Expression)**轻松获取每行的层级编号,这也是处理这类树形层级问题的标准方案。下面是具体实现步骤:

1. 模拟原始测试数据

先创建测试表并插入你提供的数据,方便后续验证:

CREATE TABLE TestHierarchy (
    ID INT PRIMARY KEY,
    Name VARCHAR(10),
    Parent INT
);

INSERT INTO TestHierarchy (ID, Name, Parent)
VALUES 
(1, 'Test1', NULL),
(2, 'Test2', NULL),
(3, 'Test3', 1),
(4, 'Test4', 3),
(5, 'Test5', 2),
(6, 'Test6', 4),
(7, 'Test7', 3);

2. 递归CTE查询实现层级计算

递归CTE分为两个核心部分:

  • 锚点成员:筛选所有根节点(Parent为NULL的记录),并将它们的层级设为0
  • 递归成员:通过关联父节点ID,逐层遍历子节点,每往下一层层级数加1

具体查询代码如下:

WITH HierarchyCTE AS (
    -- 锚点成员:定义根节点的层级为0
    SELECT 
        ID, 
        Name, 
        Parent, 
        0 AS Level
    FROM TestHierarchy
    WHERE Parent IS NULL

    UNION ALL

    -- 递归成员:关联父节点,层级递加1
    SELECT 
        th.ID, 
        th.Name, 
        th.Parent, 
        hcte.Level + 1 AS Level
    FROM TestHierarchy th
    INNER JOIN HierarchyCTE hcte ON th.Parent = hcte.ID
)
SELECT ID, Name, Parent, Level
FROM HierarchyCTE
ORDER BY ID; -- 按ID排序匹配你的期望输出格式

3. 最终查询结果

执行上述代码后,会得到完全符合你需求的输出:

IDNameParentLevel
1Test1NULL0
2Test2NULL0
3Test311
4Test432
5Test521
6Test643
7Test732

这个方案完全适配SQL Server 2012的语法,对于常规规模的树形数据集,性能表现也足够稳定。

内容的提问来源于stack exchange,提问作者Sandeep Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 03:49:10