2011-03-07 39 views
0

我有一个表:
1 | 5
2 | 4
3 | 3
4 | 2
5 | 1
(实际的表是有很多名字,我想要的是刚刚得到每一种组合的一组)
有没有办法得到最后没有重复颠倒的行?
我只是想:
1 | 5
2 | 4
3 | 3个
行..我可以做到这一点的SQL?我可以得到在表格中不重复的行吗?

回答

1

这会解决你的问题:

select * 
from MyTable 
where ColA <= ColB 

编辑:好吧,如果你有情况下,像20,5,那么你可以使用这个:

with allpairs as (
    select ColA, ColB 
    from MyTable 
    where ColA <= ColB 

    union all 

    select ColB, ColA 
    from MyTable 
    where ColB < ColA 
) 
select distinct * 
from allpairs 
+0

可能,但是,如果有什么在表中值分别为20和5,其中没有对应5和20. – DRapp 2011-03-07 11:43:39

+0

感谢您的回答,他们很有帮助! – dpoedq 2011-03-07 12:10:41

3

喜欢的东西:

select distinct(case when x<y then x||'|'||y else y||'|'||x end) from table; 

应该在Oracle上工作,在不同的db中使用相当于case。

测试:

select distinct(case when x<y then x||'|'||y else y||'|'||x end) from 
(select 1 x,2 y from dual 
union 
select 1 x,2 y from dual 
union 
select 1 x,3 y from dual 
union 
select 3 x,2 y from dual 
union 
select 2 x,1 y from dual 
); 

返回: 1 | 2 1 | 3 2 | 3

+0

就在我要去的地方......我唯一关心的人发布是如果他/她想保留原始列作为列,而不是一起管理。 – DRapp 2011-03-07 11:46:32

相关问题