我是pl sql的新手,需要幫助。我怎樣才能只選擇那些具有相同 "代碼 "的不同 "名稱 "的行呢?
例如,我有表1,我想得到表2.
。表1:客戶
表2:顧客
| id | name | num_id | num_id
|---|---|---|
| 1 | Jenny |
這是我的查詢:
select distinct t1.name, t1.num_id
from customer t1
join (select distinct name, num_id, count (*)
from客戶
group by name, num_id
having count (*) >/span> 1 ) t2
on t1.num_id = t2.num_id and t1.name <>/span> t2.name
order by 2;
但它不作業。 你能幫助我嗎?
uj5u.com熱心網友回復:
在子查詢中不需要名字。你需要找到有多個名字的num_id,因此group by num_id和count(distinct name)。
select distinct t1.name, t1.num_id
from customer t1
join (
select num_id, count (distinct name)
from客戶
group by num_id
having count (distinct name) >/span> 1
) t2 on t1.num_id = t2.num_id
order by 2;
uj5u.com熱心網友回復:
你也可以使用下面的sql來完成作業。
- 首先,在inline view t中,我使用count analytic函式來讓oracle計算每個num_id的獨立值。
- 然后,我用cnt > 1條件過濾掉行內t中的結果
- 然后,我用cnt > 1條件過濾掉行內t中的結果。
- 然后,我使用group by子句來聚合來自inline t的每個name和num_id列的結果。一旦這樣,你只需要使用min聚合函式來選擇最小的id。
select min(id) id, name, num_id
from (
select id, name, num_id, count(distinct name) over (partition by num_id) cnt
from Your_Customer_Table
) t
where cnt > 1
group by name, num_id
order by 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/322146.html
標籤:
