Oracle SQL:按字母顺序查找唯一组合和顺序

时间:2013-01-23 07:05:14

标签: sql oracle

我有下面的数据:(列Name1和Name2)作为另一个查询的结果。

Name1 Name2

A B

B A

然而,任何这样的配对实际上应该只被认为是一个,并且应该仅报告为A B(A在B之前,按字母顺序排序)

如何在Oracle / PlSQL中完成?

1 个答案:

答案 0 :(得分:2)

你可以这样做:

SELECT DISTINCT Name1, Name2
FROM (
      SELECT Name1, Name2 FROM t WHERE Name1 <= Name2
      UNION ALL
      SELECT Name2, Name1 FROM t WHERE Name1 > Name2
     );

哪个应该有效且非常简单,但效率不高:

SELECT DISTINCT
       CASE WHEN Name1 <= Name2 THEN Name1 ELSE Name2 END AS Name1
      ,CASE WHEN Name1 <= Name2 THEN Name2 ELSE Name1 END AS Name2
FROM t;

或只是:

SELECT DISTINCT
       LEAST(Name1, Name2) AS Name1
      ,GREATEST(Name1, Name2) AS Name2
FROM t;

我没有在这些查询中考虑过NULL。如果列可以为空,则必须修改&lt; =比较以将这些考虑在内。