我有下面的数据:(列Name1和Name2)作为另一个查询的结果。
Name1 Name2
A B
B A
然而,任何这样的配对实际上应该只被认为是一个,并且应该仅报告为A B(A在B之前,按字母顺序排序)
如何在Oracle / PlSQL中完成?
答案 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; =比较以将这些考虑在内。