对于这个问题的标题并不完全确定,但我已经被这个问题困扰了几个小时,但没有成功搜索类似的问题或帖子。
基本上我在TableA中有3列,如下所示:
**| Col1 | Col2 | Col3 |**
| 1 | 2 | 50 |
| 1 | 3 | 64 |
| 2 | 1 | 71 |
| 2 | 5 | 16 |
| 5 | 2 | 23 |
Col1 is a SourceID, Col2 is a TargetID and Col3 is the Value
Col1和Col2是从另一个表引用的ID。 Col1和Col2在同一记录中不能相同,因此Col1不能同时为1
,而Col2为1
。但是,正如您从记录1和3中看到的那样,它们引用了相同的两个ID,但是它们已经交换了列。
现在我的问题是:如何获得每个ID的总价值,如下表所示:
**| Col1 | Col2 | Col3 |**
| 1 | 2 | 121 |
| 1 | 3 | 64 |
| 2 | 5 | 39 |
Col3 Value with将是具有匹配ID的所有值的总和(无论ID是否出现在Col1或Col2中),它们将由Col1 ASC订购。这基本上意味着删除了以下两个记录:
| 2 | 1 | 71 |
| 5 | 2 | 23 |
我很乐意在需要的地方添加额外的信息,但这很难描述 - 任何帮助都将不胜感激!
答案 0 :(得分:5)
使用least
和greatest
。
select least(col1,col2),greatest(col1,col2),sum(col3)
from tbl
group by least(col1,col2),greatest(col1,col2)
请注意,这可能会为您提供不在表中的行组合。你应该澄清是否必须避免这种情况。