【问题标题】:SQL Server, join multiple columns in a row with sum upSQL Server,将多列连接到一行中
【发布时间】:2018-12-19 20:40:58
【问题描述】:

我有这样的行(大约 120000),我的表有 3 列,如 a、b、c。

  a          b          c
 ---        ---        ---
hello      world       10
 hey        you        80
world      hello       20
 my         day        15
merhaba    dunya       40
 life       good       75
good         day       70
thank        you       15
 it          is        40
dunya      merhaba     20
 is          it        80

我想在前两列(a 和 b)中找到相反的值,然后在 c 列中求和它们的值。

结果应如下所示:

 a          b          c
 ---        ---        ---
hello      world       30
 hey        you        80
  my        day        15
merhaba    dunya       60
 good       day        70
 thank      you        15
  it        is        120

【问题讨论】:

  • Sum(c) 和 A 和 B 分组?
  • 如果你真的需要解决方案,我想你自己也试过了。您的尝试是什么,请分享它,因为它可能(将)帮助我们更快地为您提供答案。
  • 多行的 A 和 B 值相同(不相反)会怎样?就像有两行 A="Hello" 和 B="World"?
  • @Markov 是的,先生。
  • @Larnu 我试过了; select t.a, t.b, sum(t.c + coalesce(t2.c,0)) from mytable t left join mytable t2 on t.a = t2.b and t.b = t2.a group by t.a, t.b

标签: sql sql-server join ssms multiple-columns


【解决方案1】:

你可以这样做:

select min(a), max(b), sum(c)
from t
group by (case when a < b then a else b end),
         (case when a < b then b else a end);

【讨论】:

  • 除了此结果集将包括 A="dunya" 和 B="merhaba" 而不是所需结果集中的相反内容。在这个问题中并不清楚这有多重要。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-15
  • 1970-01-01
  • 2020-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多