首页 > 解决方案 > 使用 CTE 删除重复项时,有什么方法可以对重复行求和?

问题描述

我有一个包含重复的表ItemId。我正在使用CTE删除重复记录并为每个项目只保留一条记录。我能够使用以下查询成功实现这一里程碑:

Create procedure sp_SumSameItems
as
begin
    with cte as (select a.Id,a.ItemId,Qty, QtyPrice, 
    ROW_NUMBER() OVER(PARTITION by ItemId ORDER BY Id) AS rn from tblTest a)
    delete x from tblTest x Join cte On x.Id = cte.Id where cte.rn > 1
end

实际的问题是我想Sum在删除重复记录之前QtyQtyPrice我应该在哪里添加Sum功能?

问题说明:

在此处输入图像描述

标签: sql-serverduplicatesaggregate-functionscommon-table-expression

解决方案


你不能使用updatewithdelete语句,你需要updatebefore :

update t
     set t.qty = (select sum(t1.qty) from table t1 where t1.itemid = t.itemid);

推荐阅读