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

T-SQL中通过关联三张表为主表添加关联表的聚合求和值

问题修正:按A表ID分组计算关联金额总和

表结构与关联规则

  • A表:jira_unresolved_sales_issue_v(主表),id为唯一标识
  • B表:jira_causes_links_v(关联中间表),通过srcID关联A表id,dstID关联C表issueid
  • C表:jira_invoices_v,需计算状态不为Canceled的金额总和,issueid为唯一标识

需求:通过左连接将C表符合条件的金额总和对应到A表每条记录,最终按A表id分组得到金额合计。

原SQL问题分析

原SQL在GROUP BY中错误包含了C.amount,这会导致每个不同的C表求和结果都单独分组,进而返回过多行数,无法实现按A表id正确汇总的需求。

select  A.id, sum(C.Amount) as amount
from A
LEFT JOIN B on A.id = B.srcID
LEFT JOIN ( Select C.issueid, sum(C.amount) as amount
FROM C
WHERE C.status <> 'Canceled'
GROUP BY C.issueid) as C on B.dstID= C.issueID
GROUP BY A.ID, C.amount -- 此处C.amount属于多余分组条件,会拆分结果

修正后的SQL

SELECT 
    A.id,
    COALESCE(SUM(C.amount), 0) AS total_amount -- 处理无关联记录时的null值,转为0
FROM 
    jira_unresolved_sales_issue_v A
LEFT JOIN 
    jira_causes_links_v B ON A.id = B.srcID
LEFT JOIN (
    SELECT 
        issueid,
        SUM(amount) AS amount
    FROM 
        jira_invoices_v
    WHERE 
        status <> 'Canceled'
    GROUP BY 
        issueid
) C ON B.dstID = C.issueid
GROUP BY 
    A.id -- 仅按主表唯一标识分组,确保每条A记录对应一行汇总结果

关键修正点

  • 移除GROUP BY中的C.amount,仅保留A.id,保证按主表维度正确分组
  • 使用COALESCE函数将无关联记录时的NULL求和结果转为0,避免结果出现空值
  • 内层子查询已按C表issueid完成金额汇总,外层对关联到的C表汇总值再次求和,适配一个A记录对应多个B、C记录的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:20:11