sql“group by”将对应于同一对的行分组

时间:2013-03-06 07:10:24

标签: sql

我有一个包含2列的表 - “primary”和“secondary”。此外,还有其他列。 以下是一组示例行:

id=1, primary=A, secondary=B, .....
id=2, primary=C, secondary=D, .....
....
.......
id=200, primary=B, secondary=A, .....
id=300, primary=J, secondary=D, .....

我需要一个“GROUP BY”查询,该查询将对主要值和次要值属于同一对值的所有行进行分组,而不管顺序。 所以, 小组应如下所示:

group=1, nodepair=BA, ....   // (primary=A && secondary=B) OR (primary=B && secondary=A)
group=2, nodepair=JM, ....   // (primary=J && secondary=M) OR (primary=M && secondary=J)

感谢。

2 个答案:

答案 0 :(得分:2)

你在找这样的东西吗?

select least(primary, secondary)
      ,greatest(primary, secondary)
 from yourtable
group 
   by least(primary, secondary)
     ,greatest(primary, secondary);

无论顺序如何,每个独特的小学/中学组合都会给你一组,即{A,B}与{B,A}相同。

答案 1 :(得分:0)

select * from table t1
inner join table t2
on t1.primary = t2.secondary 
and t1.secondary = t2.primary 

然后你会得到结果:

id = 1,primary = A,secondary = B,id = 200,primary = B,secondary = A. id = 200,primary = B,secondary = A,id = 1,primary = A,secondary = B

相关问题