[英]ORACLE Select Distinct return many columns and where
我有一張桌子,看起來像這樣:
NAME Col1 Col2 Col3
Tim 1 2 3
Tim 1 1 2
Tim 2 1 2
Dan 1 2 3
Dan 2 2 1
Dan 2 1 3
我試圖做一個SELECT命令,結果是這樣的:
NAME Col1 Col2 Col3
Tim 2 1 2
Dan 2 2 1
因此,我需要唯一的名稱,但選擇所有四個列,並選擇Col1 =2。在這里,我使用解決方案來使唯一的部分正常工作: SQL / mysql-選擇唯一/唯一,但返回所有列?
但是,當我在select語句的WHERE部分中添加add Col1 = '2'
,並不會返回Col1為2的所有名稱,因為我認為它首先查找的是一個不同的數字,而不是1,因此需要該結果。
希望我有道理,有人可以幫助。 很難解釋,並想出一個好標題。 謝謝!
如果僅選擇這兩列(名稱和col1)就足夠了,則可以使用:
select
distinct x.name, x.col1
from table_name x
where x.col1 = 2;
要么
select
x.name, x.col1
from table_name x
where x.col1 = 2
group by (x.name, x.col1);
如果您需要所有值,但不介意滿足條件的多個記錄中的哪個(例如Dan 2 2 1或Dan 2 1 3),則可以使用此值(它將根據順序記錄第一個記錄)條件):
select xx.name, xx.col1, xx.col2, xx.col3
from (select
x.name, x.col1, x.col2, x.col3, dense_rank() over (partition by x.name order by x.name, x.col1, x.col2, x.col3) rnk
from table_name x
where x.col1 = 2) xx
where xx.rnk = 1;
據我了解,此查詢應該可以解決您的問題:
select distinct a.* from temp_ids a join
(select name, max(col1 || ' ' || col2 || ' ' || col3) id
from temp_ids
where col1 = 2
group by name
) b
on (a.name = b.name and (col1 || ' ' || col2 || ' ' || col3) = b.id)
;
當然,最好使用唯一的記錄ID代替串聯,但是可以生成ID。 確保id的函數為每個列組合返回唯一值(在這種情況下使用(col1 ||'''|| col2 ||''|| col3))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.