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

按聚合值删除行:移除聚合为0的正负抵消明细行

删除聚合值为0的明细行解决方案

我来帮你搞定这个需求——要移除那些按orderid、account、vatid分组后,amount和vat总和都为0的明细行,对吧?这类行通常是一正一负完全抵消的记录,留着反而会干扰后续的交易处理。

实现思路

  1. 先按核心维度(orderid、account、vatid)分组,计算每组的总金额和总税额
  2. 筛选出总金额和总税额都为0的分组
  3. 删除临时表中属于这些分组的所有明细行

完整代码示例

DECLARE @tmp TABLE ( orderid INT , account INT , vatid INT , amount DECIMAL(10,2) , vat DECIMAL(10,2) )
-- 测试数据
INSERT @tmp VALUES 
( 10001, 30500, 47, 175.50, 9.20 ) ,
( 10001, 30501, 47, 2010.60, 18.30 ) ,
( 10001, 30501, 47, -2010.60, -18.30 ), -- 这行会和上一行抵消,聚合后总和为0
( 10002, 30500, 47, 147.65, 8.05 ),
( 10002, 30500, 47, -147.65, -8.05 ); -- 这组聚合后总和为0,会被删除

-- 执行删除操作
WITH AggregatedGroups AS (
    SELECT 
        orderid, 
        account, 
        vatid,
        SUM(amount) AS total_amount,
        SUM(vat) AS total_vat
    FROM @tmp
    GROUP BY orderid, account, vatid
    HAVING SUM(amount) = 0 AND SUM(vat) = 0
)
DELETE t
FROM @tmp t
JOIN AggregatedGroups ag 
    ON t.orderid = ag.orderid 
    AND t.account = ag.account 
    AND t.vatid = ag.vatid;

-- 验证结果
SELECT * FROM @tmp;

代码说明

  • CTE AggregatedGroups:负责计算每个分组的总金额和总税额,并用HAVING子句筛选出完全抵消的分组。
  • DELETE关联:通过关联临时表和筛选出的分组,精准删除所有属于这些无效分组的明细行。
  • 我在测试数据里加了两组抵消的记录,你可以运行代码看看效果,剩下的就是聚合值不为0的有效行。

内容的提问来源于stack exchange,提问作者Reto E.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:38:54