我有如下數據:(列名稱1和名稱2)作爲另一個查詢的結果。Oracle SQL:按字母順序查找唯一組合和順序
名1名2
AB
BA
然而,任何這樣的配對實際上應該被視爲只有一個,而只應報告爲AB(A來B之前,按字母順序排序)
如何在Oracle/PlSQL中執行此操作?
我有如下數據:(列名稱1和名稱2)作爲另一個查詢的結果。Oracle SQL:按字母順序查找唯一組合和順序
名1名2
AB
BA
然而,任何這樣的配對實際上應該被視爲只有一個,而只應報告爲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。如果列可以爲空,則必須修改< =比較以考慮這些因素。
什麼樣的「數據」?這兩行各有兩列嗎?或者兩個結果集分別具有兩列一列? – Thilo
@Thilo編輯了這個問題。 2行,每行2列。 – Achow