1

次のようなデータがあります: (列 Name1 および Name2) 別のクエリの結果として。

名前1 名前2

AB

学士

ただし、そのようなペアリングは実際には 1 つだけと見なされ、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 を考慮していません。列が null 許容の場合、これらを考慮して <= 比較を変更する必要があります。

于 2013-01-23T07:18:39.220 に答える