簡體   English   中英

ORACLE Select Distinct返回許多列,其中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM