sql - 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 专家,所以我无法对此提出想法,抱歉。
解决方案
这是一个棘手的问题。我假设当有一对时,您希望保持具有较高总和的对的顺序:
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
因此,此查询从汇总数据开始。然后它会查看“反向”行是否在数据中。如果是这样,它会根据更普遍的顺序来选择列。
推荐阅读
- python-3.x - 如何解决 webrtcvad.Error:处理帧时出错?
- java - java.lang.OutOfMemoryError:无法在 Windows 中创建新的本地线程 ..recreate
- c - 这个 c 程序 null 安全吗?
- python - 熊猫多索引,删除条件仍然成立的行?
- nhibernate - NHibernate - 如何使用参数值记录命名参数化查询?
- mysql - 如何仅使用 mySQL 数据库找到与给定字符串最匹配的记录?
- node.js - 使用node.js时无法使用jsPDF添加图像
- android - 显示大小从系统设置更改影响我的布局奥利奥
- python - Lambda python 3.7:参数验证失败:\n参数维度[0]的类型无效
- reactjs - 我有一个错误,因为将 react-native 安装到我的应用程序中