oracle過濾重復數據
Ⅰ 關於oracle里過濾重復數據的問題
select A,B max(C) from tab group by A,B
Ⅱ oracle如何查重復數據並顯示出來
SELECT *
FROM t_info a
WHERE ((SELECT COUNT(*)
FROM t_info
WHERE Title = a.Title) > 1)
ORDER BY Title DESC
一。查找重復記錄
1。查找全部重復記錄
Select * From 表 Where 重復欄位 In (Select 重復欄位 From 表 Group By 重復欄位 Having Count(*)>1)
2。過濾重復記錄(只顯示一條)
Select * From HZT Where ID In (Select Max(ID) From HZT Group By Title)
註:此處顯示ID最大一條記錄
二。刪除重復記錄
1。刪除全部重復記錄(慎用)
Delete 表 Where 重復欄位 In (Select 重復欄位 From 表 Group By 重復欄位 Having Count(*)>1)
2。保留一條(這個應該是大多數人所需要的 ^_^)
Delete HZT Where ID Not In (Select Max(ID) From HZT Group By Title)
註:此處保留ID最大一條記錄
1、查找表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷
select * from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
2、刪除表中多餘的重復記錄,重復記錄是根據單個欄位(peopleId)來判斷,只留有rowid最小的記錄
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
3、查找表中多餘的重復記錄(多個欄位)
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
4、刪除表中多餘的重復記錄(多個欄位),只留有rowid最小的記錄
delete from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
5、查找表中多餘的重復記錄(多個欄位),不包含rowid最小的記錄
select * from vitae a
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
補充:
有兩個以上的重復記錄,一是完全重復的記錄,也即所有欄位均重復的記錄,二是部分關鍵欄位重復的記錄,比如Name欄位重復,而其他欄位不一定重復或都重復可以忽略。
1、對於第一種重復,比較容易解決,使用
select distinct * from tableName
就可以得到無重復記錄的結果集。
如果該表需要刪除重復的記錄(重復記錄保留1條),可以按以下方法刪除
select distinct * into #Tmp from tableName
drop table tableName
select * into tableName from #Tmp
drop table #Tmp
發生這種重復的原因是表設計不周產生的,增加唯一索引列即可解決。
2、這類重復問題通常要求保留重復記錄中的第一條記錄,操作方法如下
假設有重復的欄位為Name,Address,要求得到這兩個欄位唯一的結果集
select identity(int,1,1) as autoID, * into #Tmp from tableName
select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID
select * from #Tmp where autoID in(select autoID from #tmp2)
Ⅲ oracle imp 導入命令 怎麼過濾重復數據
1、oracle imp 導入先建立表結構,之後對要過重的數據加上主鍵這樣導入就能回過濾。
2、但不答建議在導入時過濾那樣性能會慢,可以先進行導入後去重更簡單。
DELETE FROM tab
WHERE ROWID NOT IN(SELECT max(ROWID) from tab a
GROUP BY a.col HAVING COUNT(*) > 1)
這樣導入後很快。
Ⅳ oracle查詢過濾重復相同的數據。
SELECT DISTINCT TA.QA_TYPE TYPE,
TQ.TYPE_DESCRIPTION TYPEDESCRIPTION
FROM T_QA_RULE_DEFINE TA, T_QA_CHECK TQ
WHERE TA.QA_TYPE = TQ.TYPE
AND TA.QA_CHECK_TYPE = TQ.CHECK_TYPE
AND TA.VALID_FLAG = 'Y'
只取這兩個欄位不就行了么,是不回是你想答要的
Ⅳ oracle 要查詢 多個欄位 但是要過濾掉 重復的數據 sql 語句怎麼寫啊 大神們 幫幫忙啊!
distinct後面也可以跟多個欄位啊
要麼你用group by 但是group by和distinct的效果是一樣的。
Ⅵ oracle查詢語句過濾重復數據問題
select distinct x,y ferom t;
select x,y from t group by x,y;
select * from t group by x,y having count(*)>1 ;--查出有重復記錄的數據,如果having count(*)=1 是查出沒有重復記錄的數據
select * from t a1 where rowid=(select max(rowid) from t a2 where a2.x=a1.x and a2.y=a1.y); --利用rowid唯一,適用於回少量重復數據
還有 rank over(partition)這個函答數你也可以好好看哈哦
Ⅶ Oracle 根據列值過濾重復數據
select distinct(presonnel_id) from (select id from table_name ordet by DESC ) where rownum < 3
試試
Ⅷ oracle select 如何過濾重復值
select b.DFI_FND_FUND_ID,a.PFU_TOTAL_UNITS,sum(b.DFI_OFFER_PRICE)
from T_POLICY_FUND_UNITS a, T_DAILY_FUND_INFORMATION b
where a.PFU_FND_FUND_ID = b.DFI_FND_FUND_ID
and a.PFU_PFA_POL_POLICY_ID = '1173204101012010'
and a.PFU_LATEST_INDICATOR = 'L'
group by b.DFI_FND_FUND_ID,a.PFU_TOTAL_UNITS
Ⅸ oracle語句如何過濾重復信息
select distinct * from
(select
rec.pk_corp as pk_corp ,
rec.barcode ,
sq.ckxh as ckxh,
case when dcb.pk_ql_qdyt_lc_ckpyjj is not null then 0 else dcb.fsgs end as fsnum ,
dcb.cksh as sqbillno,
dcb.gsnum ,
dcb.sygs as synum ,
dcb.fsgs as jjnum ,
dcb.outbillno ,
dcb.outdate
from ql_qdyt_js_receive rec
left join ql_qdyt_lc_cksq sq on rec.barcode=sq.applysamplenum
left join ql_qdyt_dc_qddc dc on sq.applysamplenum=dc.barcode
left join ql_qdyt_dc_qddc_b dcb on dc.pk_qdyt_dc_qddc=dcb.pk_qdyt_dc_qddc
where nvl(rec.dr,0)=0
and nvl(sq.dr,0)=0
and nvl(dc.dr,0)=0
and nvl(dcb.dr,0)=0
and rec.vbillstatus=1
and dc.vbillstatus=1
and sq.vbillstatus=1
and dcb.pk_qdyt_lc_cksq is not null);