我在一列上使用了 distinct 關鍵字,它確實作業得很好,但是當我在選擇查詢中添加第二列時,它對我不起作用,因為兩列都有重復的值。所以我不想顯示兩列中的重復值。是否有任何適當的選擇查詢。
樣本資料為:
對于 Col001:
555
555
7878
7878
89.
Col002:
43
43
56
56
56
67
67
67
79
79
79.
我想要這種格式的這些資料: Col001:
555
7878
89.
Col002:
43
56
67
79
我嘗試了以下查詢:
Select distinct col001, col002 from tbl1
uj5u.com熱心網友回復:
使用集合運算子。UNION 將為您提供來自兩個子查詢的唯一值集。
select col001 as unq_col_val
from your_table
union
select col002
from your_table;
這假設您不關心值是來自 COL001 還是 COL002。如果您大驚小怪,此變體會保留該資訊:
select 'COL001' as source_col
,col001 as unq_col_val
from your_table
union
select 'COL002' as source_col
,col002
from your_table;
請注意,如果兩列中存在相同的值,則此結果集將包含更多行。
uj5u.com熱心網友回復:
DISTINCT考慮到行中的所有值,在整行中作業,并將洗掉整行重復的重復值。
例如,給定樣本資料:
CREATE TABLE table_name (col001, col002) AS
SELECT 1, 1 FROM DUAL UNION ALL
SELECT 1, 2 FROM DUAL UNION ALL
SELECT 1, 3 FROM DUAL UNION ALL
SELECT 2, 1 FROM DUAL UNION ALL
SELECT 2, 2 FROM DUAL UNION ALL
--
SELECT 1, 2 FROM DUAL UNION ALL -- These are duplicates
SELECT 2, 2 FROM DUAL;
然后:
SELECT DISTINCT
col001,
col002
FROM table_name
輸出:
COL001 COL002 1 1 1 2 1 3 2 1 2 2
并且已洗掉重復項。
如果您只想為每一列顯示不同的值,那么您需要分別考慮每一列并且可以使用類似的東西:
SELECT c1.col001,
c2.col002
FROM ( SELECT DISTINCT
col001,
DENSE_RANK() OVER (ORDER BY col001) AS rnk
FROM table_name
) c1
FULL OUTER JOIN
( SELECT DISTINCT
col002,
DENSE_RANK() OVER (ORDER BY col002) AS rnk
FROM table_name
) c2
ON (c1.rnk = c2.rnk)
哪個輸出:
COL001 COL002 1 1 2 2 無效的 3
db<>在這里擺弄
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/483447.html
標籤:sql 甲骨文 oracle11gr2
上一篇:ALTERCOLUMN標記型別varchar('800');
下一篇:Ionic-升級到CordovaAndroid10后,cordova-support-google-services插件無法安裝
