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

SQL如何按Cliente分组对同一列按不同条件聚合求和

解决方案

针对同列按不同条件分别求和、统一按Cliente分组输出的需求,直接使用条件聚合实现即可,无需拆分4条独立查询再拼接,单次扫描表就能返回全量结果,性能和可维护性都更优。

推荐写法

SELECT 
    Cliente,
    SUM(CASE WHEN Condição = 0 THEN [Valor Original] ELSE 0 END) AS Emitidos,
    SUM(CASE WHEN Condição = 1 THEN [Valor Original] ELSE 0 END) AS Baixados,
    SUM(CASE WHEN Condição = 2 THEN [Valor Original] ELSE 0 END) AS Devolvidos,
    SUM(CASE WHEN Condição = 3 THEN [Valor Original] ELSE 0 END) AS Outros
FROM TAB_Documentos
GROUP BY Cliente;

逻辑说明

  • 遍历表中每一行时,通过CASE WHEN判断该行Condição字段的值,匹配对应状态就把该行的[Valor Original]计入对应列的求和,不匹配则计0
  • 最终按Cliente字段分组聚合,每个Cliente对应一行结果,同时展示四个状态的求和值
  • 注意你提供的第四条查询存在笔误:OutrosFROM两个关键字之间缺少空格,编写时需要修正

备选:基于现有4条查询的拼接写法(不推荐)

如果一定要复用你写好的4条独立语句,可以通过全外连接拼接结果集,但这种写法需要多次扫描表,还要额外处理空值避免漏数,代码冗余且性能差,仅做参考:

SELECT 
    COALESCE(e.Cliente, b.Cliente, d.Cliente, o.Cliente) AS Cliente,
    e.Emitidos,
    b.Baixados,
    d.Devolvidos,
    o.Outros
FROM (SELECT Cliente, SUM([Valor Original]) As Emitidos FROM TAB_Documentos WHERE Condição = 0 GROUP BY Cliente) e
FULL OUTER JOIN (SELECT Cliente, SUM([Valor Original]) As Baixados FROM TAB_Documentos WHERE Condição = 1 GROUP BY Cliente) b ON e.Cliente = b.Cliente
FULL OUTER JOIN (SELECT Cliente, SUM([Valor Original]) As Devolvidos FROM TAB_Documentos WHERE Condição = 2 GROUP BY Cliente) d ON COALESCE(e.Cliente, b.Cliente) = d.Cliente
FULL OUTER JOIN (SELECT Cliente, SUM([Valor Original]) As Outros FROM TAB_Documentos WHERE Condição = 3 GROUP BY Cliente) o ON COALESCE(e.Cliente, b.Cliente, d.Cliente) = o.Cliente

代码中用COALESCE和FULL OUTER JOIN处理了某个Cliente没有对应状态记录时的空值和Cliente字段缺失问题,避免结果漏数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 02:48:33