使用 CTE 删除重复项时,有什么方法可以对重复行求和吗?

Is there any way to sum duplicate rows when deleting duplicates using CTE?

我有一个 table,其中包含重复的 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 功能?

问题说明:

您不能将 updatedelete 语句一起使用,您需要在 update 之前使用 :

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

一个 CTE 只对一个语句有效,所以你需要 运行 cte 两次,一次求和然后删除,或者你可以把 CTE 的结果放在一个临时文件中 table然后使用temp table求和然后删除原来table.

中的记录

在第一级,您必须更新 Qty 和 QtyPrice,然后删除重复记录。

举个例子:

CREATE PROCEDURE Sp_sumsameitems 
AS 
  BEGIN 
      WITH cte1 
           AS (SELECT a.id, 
                      a.itemid, 
                      Sum(qty)     Qty, 
                      Sum(qtyprice)QtyPrice, 
               FROM   tbltest a 
               GROUP  BY a.id) 
      UPDATE x 
      SET    x.qty = c.qty, 
             x.qtyprice = c.qtyprice 
      FROM   tbltest x 
             JOIN cte1 c 
               ON x.id = cte.id 

      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