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

SQL Server 2022中递归计算分段及子分段总重量求助

递归CTE计算分段及子分段总重量的解决方案

原递归CTE仅遍历了层级结构,但未实现每个节点包含自身及所有子节点重量的累加。以下是调整后的方案,通过在递归过程中保留根节点标识,最终聚合得到每个节点的总重量:

完整SQL代码

WITH RCTE AS (
    -- 锚点成员:所有节点,将自身标记为根节点
    SELECT 
        s.SEGMENTID AS RootSegmentID,
        s.SEGMENTID,
        sp.WEIGHT
    FROM SEGMENT s
    INNER JOIN SEGMENTPART sp ON s.SEGMENTPARTSID = sp.SEGMENTPARTSID

    UNION ALL

    -- 递归成员:遍历子节点,传递根节点标识
    SELECT 
        r.RootSegmentID,
        s.SEGMENTID,
        sp.WEIGHT
    FROM SEGMENT s
    INNER JOIN SEGMENTPART sp ON s.SEGMENTPARTSID = sp.SEGMENTPARTSID
    INNER JOIN RCTE r ON s.SEGMENTID_FK = r.SEGMENTID
)
-- 按根节点分组,求和所有关联节点的重量
SELECT 
    RootSegmentID AS SEGMENTID,
    SUM(WEIGHT) AS Total_weight
FROM RCTE
GROUP BY RootSegmentID
ORDER BY RootSegmentID;

代码说明

  1. 锚点成员:不再仅筛选顶级节点,而是包含所有分段节点,将每个节点自身标记为RootSegmentID,确保每个节点都能作为根节点启动递归。
  2. 递归成员:通过SEGMENTID_FK关联父节点,同时传递父节点的RootSegmentID,让所有子节点都关联到其所有祖先根节点。
  3. 聚合计算:按RootSegmentID分组求和,得到每个节点自身及所有子分段的总重量。

执行结果

SEGMENTID  Total_weight
-----------------------
1             108.3
2              36.7
3              61.1
4               8.7
5              12.8
6              40.8

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 22:30:16