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

如何为所有记录返回根CustomerID?递归CTE问题求助

解决方案:递归CTE传递根节点CustomerID

你的核心问题是原递归CTE未保留并传递根节点的CustomerID,仅计算了层级。要实现需求,需在锚点查询中定义根节点ID字段,并在递归环节继承该值。

修改后的递归CTE代码

;WITH root_customerID_cte AS (
    -- 锚点查询:获取根节点,将自身CustomerID设为RootCustomerID
    SELECT
        CustomerGUID,
        CustomerID,
        CustomerName,
        DepartmentName,
        ParentGUID,
        CustomerID AS RootCustomerID,
        1 AS level
    FROM dbo.Customer
    WHERE ParentGUID IS NULL
      AND CustomerName LIKE '%Customer1%'
    UNION ALL
    -- 递归查询:关联父节点,直接继承根节点ID
    SELECT
        c.CustomerGUID,
        c.CustomerID,
        c.CustomerName,
        c.DepartmentName,
        c.ParentGUID,
        r.RootCustomerID,
        r.level + 1
    FROM dbo.Customer c
    INNER JOIN root_customerID_cte r
        ON c.ParentGUID = r.CustomerGUID
    WHERE c.CustomerName LIKE '%Customer1%'
)
-- 筛选目标字段输出
SELECT
    CustomerID,
    CustomerName,
    DepartmentName,
    RootCustomerID
FROM root_customerID_cte
ORDER BY CustomerID;

关键说明

  • 锚点环节:针对ParentGUID IS NULL的根节点,新增RootCustomerID字段,值为自身的CustomerID(根节点的根就是自己)。
  • 递归环节:关联父节点后,直接复用父节点的RootCustomerID,确保所有子节点、孙节点都指向同一根节点ID。
  • 最终查询仅保留你需要的四个字段,剔除冗余的GUID、父节点ID和层级字段。

输出验证

执行代码后将得到符合预期的结果:

CustomerIDCustomerNameDepartmentNameRootCustomerID
1Customer1Corporate1
2Customer1Department11
3Customer1SubDepartment11

内容的提问来源于stack exchange,提问作者Rob Hall

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 15:12:40