SQL Server-合并重复行和交叉行

时间:2019-02-20 20:34:44

标签: sql sql-server tsql multiple-columns

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

HashSet

我想这样做,当我用SQL编译代码时,我的表应该看起来像这样;

contains()

注意:我不是SQL专家,抱歉,我对此无能为力。

1 个答案:

答案 0 :(得分:0)

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

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

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