我正在尝试在类似图表的表格中整合数据。基本上,我在顶点之间转换了一些值,我想在同一行中检索唯一的顶点对,边缘值显示为列。对于每对,我有两个记录:从 A 边缘过渡到 B 边缘,从 B 边缘过渡到 A < / strong> edge,我想将它们合并为一行。
我试着通过例子来解释它。
我们说我有一张具有以下结构的表:
| column1 | column2 | column3 |
| ------- | ------- | ------- |
| A | B | 1 |
| ------- | ------- | ------- |
| B | A | 2 |
| ------- | ------- | ------- |
| A | C | 3 |
| ------- | ------- | ------- |
| C | A | 4 |
| ------- | ------- | ------- |
我希望我的最终输出为:
| column1 | column2 | column3 | column4 |
| ------- | ------- | ------- | ------- |
| A | B | 1 | 2 |
| A | C | 3 | 4 |
我正在使用的查询给了我正确的结构,但是我遇到了重复记录的问题:
SELECT
t.column1, t.column2, t.column3, t2.column3 as column4
FROM my_table t INNER JOIN my_table t2
ON t.column1=t2.column2 AND t.column2=t2.column1;
这就是我的结果:
| column1 | column2 | column3 | column4 |
| ------- | ------- | ------- | ------- |
| A | B | 1 | 2 |
| A | C | 3 | 4 |
| B | A | 2 | 1 |
| C | A | 4 | 3 |
有关如何处理此问题或删除重复记录的任何想法?
答案 0 :(得分:1)
许多数据库支持least()
和greatest()
函数。有了这些,您可以这样做:
select least(column1, column2) as column1,
greatest(column1, column2) as column2,
min(column3) as column3,
(case when min(column3) <> max(column3) then max(column3) end) as column4
from my_table t
group by least(column1, column2), greatest(column1, column2);