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

如何在SQL中对ID与Alt_ID关联行的Quantity求和?

解决SQL中跨列匹配的多行求和问题

要实现你需要的求和逻辑,核心是先统计所有通过Alt_ID指向某个ID的行的数量总和,再将这个总和与被指向的ID行自身的Quantity相加。以下是具体实现方案:

实现查询

使用CTE(公共表表达式)先计算每个ID被其他行的Alt_ID引用的总数量,再关联原表计算最终的Total:

WITH ReferencedTotals AS (
    SELECT 
        Alt_ID AS Target_ID,
        SUM(Quantity) AS TotalReferenced
    FROM dbo.Table
    WHERE Alt_ID IS NOT NULL AND Alt_ID <> ''
    GROUP BY Alt_ID
)
SELECT 
    t.ID,
    t.Alt_ID,
    t.Quantity,
    CASE
        -- 被其他行引用的ID,总和为自身数量加所有引用行的数量
        WHEN rt.Target_ID IS NOT NULL THEN t.Quantity + rt.TotalReferenced
        -- 引用其他ID的行,总和为自身数量
        WHEN t.Alt_ID IS NOT NULL AND t.Alt_ID <> '' THEN t.Quantity
        -- 无关联的行,总和为自身数量
        ELSE t.Quantity
    END AS Total
FROM dbo.Table t
LEFT JOIN ReferencedTotals rt ON t.ID = rt.Target_ID;

原查询问题分析

你当前的查询存在两个关键问题:

  1. 窗口函数分区错误:SUM(Total_Usage) OVER (PARTITION BY T1.ID, T1.Alt_ID)会将每个ID+Alt_ID组合单独分区,对于ID='00-456'的行,分区仅包含它自己,所以求和结果只能是自身的Quantity。
  2. 逻辑覆盖不全:没有将Alt_ID指向当前ID的行的数量纳入求和范围,且代码中Total_Usage应为Quantity(原表列名是Quantity)。

测试结果

执行上述查询后,会得到你预期的结果:

IDAlt_IDQuantityTotal
00-12300-4561010
00-456NULL515

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 20:24:51