首页 > 解决方案 > SQL Server - 使用 Sum Up 连续连接重复和交叉行

问题描述

我有一个 SQL 表,它有 250000+ 行和 3 列。我的桌子是这样的;

      Column 1     Column 2     Column 3
   ----------------------------------------
       Honda        Civic         500
       Civic        Honda         250
       Alfa         Romeo         1650000
       Alfa         Romeo         150000
       Renault      Broadway      10
       Aston        Martin        750
       Renault      Megane        2000
       Megane       Renault       150
       Ferrari      Enzo          88500
       Ferrari      Enzo          500
       Renault      Megane        30000

我想这样做,当我在 SQL 中编译我的代码时,我的表应该是这样的;

      Column 1     Column 2     Column 3
   ---------------------------------------
       Honda        Civic         750
       Alfa         Romeo         1800000
       Renault      Broadway      10
       Aston        Martin        750
       Renault      Megane        32150
       Ferrari      Enzo          89000

注意:我不是 SQL 专家,所以我无法对此提出想法,抱歉。

标签: sqlsql-servertsqlmultiple-columns

解决方案


这是一个棘手的问题。我假设当有一对时,您希望保持具有较高总和的对的顺序:

with cc as (
       select column1, column2, sum(column3) as sum_column3
       from t
       group by column1, column2
      )
select (case when cc2.sum_column3 > cc.sum_column3 then cc2.column1 else cc.column1 end) as column1,
       (case when cc2.sum_column3 > cc.sum_column3 then cc2.column2 else cc.column2 end) as column2,
       (cc.sum_column3 + coalesce(cc2.sum_column3, 0)) as sum_column3
from cc left join
     cc cc2
     on cc.column1 = cc2.column2 and cc.column2 = cc2.column
where cc2.column1 is null or (cc.column1 < cc.column2);  -- keep only one row of pairs

因此,此查询从汇总数据开始。然后它会查看“反向”行是否在数据中。如果是这样,它会根据更普遍的顺序来选择列。


推荐阅读