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

如何按不同WHERE条件使用SUM计算后相减,无需创建两个查询关联?

解决方案

有更简便的实现方式,直接使用条件聚合即可完成需求,无需创建两个独立查询再做关联,修改后的SQL语句如下:

SELECT 
    dbo_Partneriai_SK.Pavad, 
    SUM(
        CASE 
            WHEN dbo_OperacijuTipai_SK.OperacijuTipaiId = 50 THEN dbo_OperacijosPard_SK.SumaBePVM
            WHEN dbo_OperacijuTipai_SK.OperacijuTipaiId = 61 THEN -1 * dbo_OperacijosPard_SK.SumaBePVM
            ELSE 0
        END
    ) AS NetSumOfSumaBePVM
FROM (dbo_OperacijosPard_SK 
INNER JOIN dbo_Partneriai_SK 
ON dbo_OperacijosPard_SK.PartneriaiId = dbo_Partneriai_SK.PartneriaiId) 
INNER JOIN dbo_OperacijuTipai_SK 
ON dbo_OperacijosPard_SK.OperacijuTipaiId=dbo_OperacijuTipai_SK.OperacijuTipaiId
WHERE (((dbo_OperacijosPard_SK.Data)>#1/1/2021#) 
AND ((dbo_OperacijuTipai_SK.OperacijuTipaiId)=50 
Or (dbo_OperacijuTipai_SK.OperacijuTipaiId)=61))
GROUP BY dbo_Partneriai_SK.Pavad
ORDER BY NetSumOfSumaBePVM DESC;

逻辑说明

  • 聚合计算时对操作类型ID为50的记录,累加SumaBePVM字段值
  • 对操作类型ID为61的记录,扣减SumaBePVM字段值
  • 其余不符合条件的记录不参与计算(你已在WHERE条件中过滤仅保留ID为50和61的记录,ELSE 0可省略,保留兼容性更强)

如果使用的是不支持CASE WHEN语法的旧版Access环境,可以替换为IIF嵌套实现同等逻辑:

SUM(
    IIF(dbo_OperacijuTipai_SK.OperacijuTipaiId=50, dbo_OperacijosPard_SK.SumaBePVM, 
    IIF(dbo_OperacijuTipai_SK.OperacijuTipaiId=61, -dbo_OperacijosPard_SK.SumaBePVM, 0))
) AS NetSumOfSumaBePVM

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 00:24:03