次のようなデータがあります: (列 Name1 および Name2) 別のクエリの結果として。
名前1 名前2
AB
学士
ただし、そのようなペアリングは実際には 1 つだけと見なされ、AB としてのみ報告されるべきです (A は B の前にあり、アルファベット順にソートされます)。
Oracle / PlSQL でどのように行うのですか?
次のようなことができます。
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 許容の場合、これらを考慮して <= 比較を変更する必要があります。