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

求助:MS SQL层级名称的递归查询实现方案

用MS SQL递归CTE实现层级名称拼接

嗨,刚接触MS SQL的话,这种层级路径拼接的需求用**递归CTE(公用表表达式)**来实现最适合不过了,刚好你的数据是标准的树形结构,直接上解决方案:

首先假设你的表名为YourTable(记得替换成你实际的表名),执行下面的SQL就能得到你想要的结果:

WITH HierarchicalCTE AS (
    -- 锚点成员:选取最顶层的节点(Parent ID = 0)
    SELECT 
        ID,
        Name,
        [Parent ID] AS ParentID,
        CAST(Name AS VARCHAR(MAX)) AS [层级名称]
    FROM YourTable
    WHERE [Parent ID] = 0

    UNION ALL

    -- 递归成员:逐层拼接父节点的层级名称
    SELECT 
        t.ID,
        t.Name,
        t.[Parent ID] AS ParentID,
        CAST(c.[层级名称] + '.' + t.Name AS VARCHAR(MAX)) AS [层级名称]
    FROM YourTable t
    INNER JOIN HierarchicalCTE c ON t.[Parent ID] = c.ID
)
SELECT 
    ID,
    Name,
    ParentID AS [Parent ID],
    [层级名称]
FROM HierarchicalCTE
ORDER BY ID;

代码简单解释:

  • 锚点成员:先把所有根节点(Parent ID = 0)筛选出来,它们的层级名称就是自身的Name,毕竟没有父节点可以拼接。
  • 递归成员:通过关联当前节点和它的父节点(来自CTE的上一层结果),把父节点的完整层级路径和当前节点的Name用.连接,形成新的层级名称。
  • 最后从CTE中取出所有字段并按ID排序,就能得到你期望的结果格式了。

拿你提供的测试数据跑一遍,完全能输出你要的层级名称效果~

内容的提问来源于stack exchange,提问作者P Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 04:13:10