我有如下数据:(列 Name1 和 Name2)作为另一个查询的结果。
名称 1 名称 2
AB
文学学士
然而,任何这样的配对实际上都应该被认为只是一个,并且应该只报告为 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。如果列可以为空,则必须修改 <= 比较以将这些考虑在内。