如何在SQL中按两行分组?

时间:2014-03-30 11:21:19

标签: sql oracle

在SQL Select命令的结果中,我有两行:

A |  B
B |  A

A | B和B | A对我来说意思相同。我想,在SQL命令中只选择其中一个。

我该怎么做?

我有一个select命令,我自己加入(自然连接),就像这样:

SELECT a.coloumn ,b.coloumn 
FROM table a,table b
where .... (not important)
and b.coloumn  IN (
  SELECT coloumn
  FROM table
  where ... (the same like above)
)
and b.coloumn != a.coloumn ;

之后我有多个coloumns。

3 个答案:

答案 0 :(得分:7)

您既没有告诉我们您的列名也没有告诉我们您的表名,但假设您在名为A的表中有两列Bthe_table,那么以下内容将会执行:

select distinct least(a,b), greatest(a,b)
from the_table;

答案 1 :(得分:2)

如果您想使用标准SQL 分组

select (case when a < b then a else b end) as a,
       (case when a < b then b else a end) as b,
       count(*) as cnt
from table t
group by (case when a < b then a else b end),
         (case when a < b then b else a end);

Oracle支持greatest()least()函数,但并非所有数据库都支持。

答案 2 :(得分:1)

另一种可能的解决方案是:

select a, b from the_table
union
select b, a from the_table

即使有NULL个值,这也可以正常工作。