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 - 连续加入重复行和交叉行的主要内容,如果未能解决你的问题,请参考以下文章