sqlserver重復記錄
① 如何使用sql語句在sqlserver中刪除重復數據
題主可 參考下列例句:
刪除表t1欄位col1有重復的記錄
delete from t1 where exists
(select 1 from (select col1 from t1 group by col1 having count(1)>1) t where t.col1=t1.col1);
如果希望對於有重復的記錄希望保留其中一條記錄而不是全部刪除,則可以運行下列語句,前提是數據表必須含有自增id列。
delete from t1 where exists
(select 1 from (select col1,max(id) as id from t1 group by col1 having count(1)>1) t where t.col1=t1.col1 and t.id<>t1.id);
② 怎麼查看資料庫表中某個欄位的值有哪些重復記錄
下面以 sqlserver資料庫為例進行說明。
select * from TableA where b in (select b from TableAgroup by b having count(b) > 1)
這樣就列舉出了b欄位所有的重復數據,可以根據對應的行號,取得位於第幾行。
如果要查詢a欄位或者c欄位重復數據,可以相應的把上面的b欄位替換成a欄位或c欄位即可。
舉例:
1、創建表student
這樣就查出名字重復列,以及行號id。
(2)sqlserver重復記錄擴展閱讀:
1. sqlserver其他相關的一些查詢:
(1)刪除表中多餘的重復記錄,重復記錄是根據單個欄位(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)
(2)查找表中多餘的重復記錄(多個欄位)
select * from vitae a where (a.peopleId,a.seq) in
(select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
(3)查找表中多餘的重復記錄(多個欄位),不包含rowid最小的記錄
select * from vitae a where (a.peopleId,a.seq) in
(select peopleId,seq from vitae group by peopleId,seq havingcount(*) > 1) and
rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
2. SQL語言元素
1、子句,是語句和查詢的組成部分。
2、表達式,可以生成標量值,也可以生成由列和行數據組成的表。
3、謂詞,指定可以評估為SQL三值邏輯(3VL)(真/假/未知)或布爾真值的條件,用於限制語句和查詢的效果,或用於更改程序流。
4、查詢,根據特定條件檢索數據。這是SQL的一個重要元素。
語句可能對架構和數據產生持久影響,或者可能控制事務,程序流,連接,會話或診斷。
SQL語句還包括分號(「;」)語句終止符。雖然並非每個平台都需要,但它被定義為SQL語法的標准部分。在SQL語句和查詢中通常會忽略無關緊要的空格,從而可以更輕松地格式化SQL代碼以提高可讀性。
③ sqlserver 的表數據錄入重復怎麼刪,保留一份
別直接導到正式表,可以先導到臨時表
如正式表AA,臨時表AA_temp
先導到AA_temp,再用語句導到AA,
insert into AA select 列1,列2,…… from AA_temp group by 列1,列2,……
也可以加個where not in ()
④ sqlserver怎麼刪除重復數據
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)
(二)
比方說
在A表中存在一個欄位「name」,
而且不同記錄之間的「name」值有可能會相同,
現在就是需要查詢出在該表中的各記錄之間,「name」值存在重復的項;
Select
Name,Count(*) From A Group By Name Having Count(*) > 1
如果還查性別也相同大則如下:
Select Name,sex,Count(*) From A Group By Name,sex Having
Count(*) > 1
⑤ sqlserver視圖中怎麼處理重復數據
distinct 一下就可以了
⑥ sqlserver 如何橫向刷新重復數據
示例,創建數據表stuinfo,有三個欄位recno(自增),stuid,stuname:
CREATE TABLE [StuInfo] ([recno] [int] IDENTITY (1, 1) NOT NULL ,[stuid] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL ,[stuname] [varchar] (10) COLLATE Chinese_PRC_CI_AS NOT NULL) ON [PRIMARY]GO
一、查某一列(或多列)的重復值。(只可以查出重復記錄的值,不能查出整個記錄的信息)
例如:查找stuid,stuname重復的記錄:
select stuid,stuname from stuinfogroup by stuid,stunamehaving(count(*))>1
二、查某一列有重復值的記錄。(此方法查出的是所有重復的記錄,如果有兩條記錄重復的,就查出兩條)
例如:查找stuid重復的記錄:
select * from stuinfowhere stuid in (select stuid from stuinfogroup by stuidhaving(count(*))>1)
三、查某一列有重復值的記錄。(只顯示多餘的記錄,也就是說如果有三條記錄重復的,就顯示兩條)
前提:需有一個不重復的列,此示例為recno。例如:查找stuid重復的記錄:
select * from stuinfo s1where recno not in (select max(recno) from stuinfo s2where s1.stuid=s2.stuid
⑦ sqlserver 數據有重復怎麼刪除
1、必須保證表中有主鍵或者唯一索引,或者某列數據不能重復。只有這樣,才可能使用一句SQL來實現。否則只能考慮其它辦法。下面的語句,假定BB列是不重復的,刪除後保存BB列值最大的那條記錄。
delete
from
表
where
aa
in
(select
aa
from
表
group
by
aa
having
count(aa)
>
1)
and
bb
not
in
(select
max(bb)
from
表
group
by
aa
having
count(aa)
>
1);
2、有多種寫法:
delete
A
from
B
where
A.AA
=
B.AA
delete
A
from
A,B
where
A.AA
=
B.AA
delete
A
where
AA
in
(select
AA
from
B)
3、使用into關鍵字:
select
*
into
新表名
from
原表
4、取數據前3位,欄位必須是類似char類型,使用類似substring這樣的函數(SYBASE是substring,ORACLE是substr):
select
substring(欄位,1,3)
from
表名
⑧ sqlserver 去掉重復記錄
首先設定表tb_a 唯一關鍵欄位 xh,以及要查詢的重復欄位 mc 則查詢mc重復的sqlserver語句如下
select mc from tb_a where xh not in (select min(xh) xh from tb_a group by mc)
⑨ SQLserver資料庫中所有欄位全部一樣的重復數據如何刪除
找到最大的rowid即可。
Sql代碼:
alterprocgetNotDupData
as
--cleartemptable
deleteODS.dbo.Agent
deletefromstage.dbo.tmpDup
deletefromstage.dbo.tmpRowNo
deletefromstage.dbo.tmpMaxRowNo
--createptable
insertintostage.dbo.tmpDup
selectdistinctAgentLogin,AgentSurName,AgentGivenNamefromstage.dbo.dAgentPerformanceStat
'3%'orderbyAgentLogin
--addrowNo
insertintotmpRowNo
select*,ROW_NUMBER()over(orderbyAgentLogin)asrownofromtmpDup
--getmaxrowno
insertintostage.dbo.tmpMaxRowNo
selectmax(rowno)as'rowno'fromstage.dbo.(*)>1
--removemaxrowno
deletefromstage.dbo.tmpRowNowhererownoin(select*fromstage.dbo.tmpMaxRowNo)
--insertintoods
insertintoODS.dbo.AgentselectAgentLogin,AgentSurName,AgentGivenNamefromstage.dbo.tmpRowNo
⑩ SQLSERVER 怎樣去除重復記錄
distinct關鍵字
select distinct 姓名 from 表a
這條語句在顯示時可以提取表a中的姓名,而且如果姓名重復的話,只顯示一條,單並不對資料庫中的數據產生影響,只是顯示的時候重復的記錄只顯示一條