SQL Server - 连续加入重复行和交叉行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SQL Server - 连续加入重复行和交叉行相关的知识,希望对你有一定的参考价值。

我有一个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人员,所以我无法为它提出一个想法,抱歉。

答案

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

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

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

以上是关于SQL Server - 连续加入重复行和交叉行的主要内容,如果未能解决你的问题,请参考以下文章

使用带有重复行和新列的 SQL Server 创建视图

sql server存储过程产生连续不重复编号

加入并更新同一列sql server [重复]

SQL Server:分组重复行集

熊猫交叉加入没有共同的列[重复]

sql COMMA加入,交叉加入