1

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

名称 1 名称 2

AB

文学学士

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

我如何在 Oracle / PlSQL 中做到这一点?

4

1 回答 1

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。如果列可以为空,则必须修改 <= 比较以将这些考虑在内。

于 2013-01-23T07:18:39.220 回答