SQL Oracle,选择不同的无序对
我的表有两列,它们标识了两个相互关联的不同个体;然而,任何一对夫妇可能会出现不止一次,其中个人在两列之间切换(例如,A向B出售100,B向A出售150): 我需要获得一个表,其中每个对只出现一次,即我需要找到不同的无序对,并对所有对应行的值求和:SQL Oracle,选择不同的无序对,sql,oracle,distinct,Sql,Oracle,Distinct,我的表有两列,它们标识了两个相互关联的不同个体;然而,任何一对夫妇可能会出现不止一次,其中个人在两列之间切换(例如,A向B出售100,B向A出售150): 我需要获得一个表,其中每个对只出现一次,即我需要找到不同的无序对,并对所有对应行的值求和: id1 id2 value A B 250 C B 110 我如何才能得到一个“索引”为不同的无序夫妇?我应该如何完成这项任务 编辑:额外发行。假设每个Id都有一个属性,例如国家: id1 id2 country
id1 id2 value
A B 250
C B 110
我如何才能得到一个“索引”为不同的无序夫妇?我应该如何完成这项任务
编辑:额外发行。假设每个Id都有一个属性,例如国家:
id1 id2 country1 country2 value
A B IT FR 100
C B US FR 110
B A FR IT 150
显然,我可以在第二步中使用联接将它们返回到结果表中。但是,有没有办法把它们放在第一位呢?您可以使用least()
和grest()
:
您可以使用最小值()
和最大值()
:
伟大的我必须在原来的问题上添加一些东西,我有一些id1和id2的属性(比如country1和country2)。我可以在会合后把它们拿回来,但有没有更优雅的方法让它们留在桌子上?(也许我需要问第二个问题)。@Giuseppe。我建议你再问一个问题。另外,一定要解释当属性在不同的行上不同时会发生什么,否则会匹配。太好了。我必须在原来的问题上添加一些东西,我有一些id1和id2的属性(比如country1和country2)。我可以在会合后把它们拿回来,但有没有更优雅的方法让它们留在桌子上?(也许我需要问第二个问题)。@Giuseppe。我建议你再问一个问题。另外,一定要解释如果不同行上的属性不同,那么会发生什么情况,否则会匹配。
id1 id2 country1 country2 value
A B IT FR 100
C B US FR 110
B A FR IT 150
select least(id1, id2) as id1, greatest(id1, id2) as id2, sum(value)
from t
group by least(id1, id2), greatest(id1, id2)