sql過濾重復行
1. sql 如何過濾重復記錄
問題背景
在一個多表查詢的sql中正常情況下產生的數據都是唯一的,但因為資料庫中存在錯誤(某張表中存在相同的外鍵ID)導致我這邊查詢出來的數據就會有重復的問題
下面結果集中UserID:15834存在多個
參考:
MSDN: OVER 子句 (Transact-SQL)
stackoverflow sql query distinct with Row_Number
SQL Trick: row_number() is to SELECT what dense_rank() is to SELECT DISTINCT
2. sql怎樣過濾重復記錄
declare @t table (ID int, Name varchar(10), address varchar(10))
insert into @t select 1,'a','1'
insert into @t select 2,'a','2'
insert into @t select 3,'a','1'
insert into @t select 4,'a','3'
insert into @t select 5,'b','2'
insert into @t select 6,'b','2'
insert into @t select 7,'b','3'
insert into @t select 8,'b','1'
insert into @t select 9,'c','1'
insert into @t select 10,'d','2'
select ID,Name,address from
(
select *,orderid=(select count(1) from @t where name=x.name and address=x.address)
from @t as x
) as y
where orderid>=2
--結果
/*
ID Name address
----------------------------------
1 a 1
3 a 1
5 b 2
6 b 2
*/
--沒試過我的?我的測試通過啊!!!
補充:
看不懂?
很簡單的呀,就這樣:
select ID,Name,address from
(
select *,orderid=(select count(1) from 表名 where name=x.name and address=x.address)
from 表名 as x
) as y
where orderid>=2
3. sql server 過濾重復記錄的語法
select * from chengji a where not exists(select 1 from chengji where Name=a.Name and age=a.age and ID<a.ID)--取小ID值
--or
select * from chengji a where not exists(select 1 from chengji where Name=a.Name and age=a.age and ID>a.ID)--取大ID值
--or
select * from chengji a where ID=(select min(ID) from chengji where Name=a.Name and age=a.age )--取小ID值,可用max(ID)
delete時
delete a from chengji a where exists(select 1 from chengji where Name=a.Name and age=a.age and ID>a.ID)
or
delete a from chengji a where exists(select 1 from chengji where Name=a.Name and age=a.age and ID<a.ID)
delete a from chengji a where ID not in(select min(ID) from chengji where Name=a.Name and age=a.age)
4. SQL Server中怎樣可以從SELECT語句的結果集中刪除重復行
在要刪除的有重復數據中存在幾種情況:
1.存在兩條完全相同的紀錄
這是最簡單的一種情況,用關鍵字distinct就可以去掉。
example: select distinct * from table(表名) where (條件)
2.存在部分欄位相同的紀錄(有主鍵id即唯一鍵)
如果是這種情況的話用distinct是過濾不了的,這就要用到主鍵id的唯一性特點及group by分組
example:
select * from table where id in (select max(id) from table group by [去除重復的欄位名列表,....])
3.沒有唯一鍵ID
example:
select identity(int1,1) as id,* into newtable(臨時表) from table
select * from newtable where id in (select max(id) from newtable group by [去除重復的欄位名列表,....])
(4)sql過濾重復行擴展閱讀:
SQL Server 是Microsoft 公司推出的關系型資料庫管理系統。具有使用方便可伸縮性好與相關軟體集成程度高等優點,可跨越從運行Microsoft Windows 98 的膝上型電腦到運行Microsoft Windows 2012 的大型多處理器的伺服器等多種平台使用。
Microsoft SQL Server 是一個全面的資料庫平台,使用集成的商業智能 (BI)工具提供了企業級的數據管理。Microsoft SQL Server資料庫引擎為關系型數據和結構化數據提供了更安全可靠的存儲功能,使您可以構建和管理用於業務的高可用和高性能的數據應用程序。
5. sql 查詢語句中如何根據條件去除部分重復的行
給你個思路,按ID 分組,date降序給數據添加行號,條件是你傳的日期,再加上條件行號=1就是你要的,你先自己寫寫看看能不能,肯定是可以實現的!
6. sql 查詢去除重復行
在select 後面加一個distinct應該就可以了,不過不建議這么做,建議找出為什麼重復的原因。能否把group by所有的欄位的select 結果都給我們看看
select distinct
SFM_BH as 住院號,SFM_XM as 姓名,SFM_JZBZ 標志, SFM_JF 繳費合計,SFM_DF 費用合計,SFM_YE 余額 from
(select SFD_BH,SFD_CZY,SFD_RQ,SFD_ZFLB,SFD_ZY from ZY_SFD
where
SFD_JDLB=0
and SFD_BZ=1
and DATEDIFF(Day, SFD_RQ, '2015-09-26 15:18:00') <= 0
and DATEDIFF(Day, SFD_RQ, '2015-10-25 15:18:00') >= 0 )
as acc left
join
ZY_SFM on (SFM_BH=SFD_BH)
Where 1=1
group by
SFM_BH,SFM_XM,SFM_RYRQ,SFM_CW,SFD_RQ,SFM_JZBZ,SFM_JF,SFM_DF,SFM_YE,SFD_ZFLB
Order by
SFM_BH,convert(char(16),SFM_RYRQ,120)DESC,SFD_RQ
7. sql去除重復行
這個簡單了,相信你要的只是查詢結果
但是重復的只是名字吧?
select disinct name from a這樣就可以了
如果想顯示其他列,可以告訴你這是不可能的
比如說 小紅 那後面對應的日期和前面的ID你要計算機來顯示哪個?
8. 如何去除個別欄位重復的行SQL如何寫
select*fromtable_namewhereidin
(
selectmin(id)fromtable_namegroupby體重
)
試下以上代碼
9. 用SQL語句怎麼過濾重復數據
有一半是添加表的,因為我沒有你的結果集,所以拼了個表變數做為結果集
,重點在後半部分,處理邏輯是按你的想寫的,前提是如果我沒有理解錯的話
這個方法的結果集返回的是每一年的數據,年數遞增的,行數以有多少個城市為准,不過我感覺你要這樣的結果集沒有什麼意義
declare @tab table(name nvarchar(20), both int)
declare @tabtmp table(name nvarchar(20), both int)
declare @tabname table(name nvarchar(20))
declare @name nvarchar(20)
declare @both int
insert into @tab
select N'上海',1996
union
select N'上海',1997
union
select N'北京',1996
union
select N'北京', 1997
insert into @tabname
select distinct name from @tab
select top 1 @name=name from @tab order by name asc
select @both=MIN(both) from @tab
while(@name is not null)
begin
insert into @tabtmp
select @name,@both
update @tab set name='' where name=@name
set @name=null
select top 1 @name =name from @tab where name<>'' order by name asc
select top 1 @both=both from @tab where both>@both order by both asc
end
select * from @tabtmp
10. SQL重復數據的篩選
你要看你有哪些數來據段是相同的源,就根據那些相同的數據段分類。
比如說,
A B C D
1 1 1 3
1 1 1 4
1 1 1 5
(前面的insert 我就不寫了)
那就是select A,B,C,MAX(D) FROM TABLE GROUP BY A,B,C
如果是
A B C D
1 1 1 2
2 1 1 3
3 1 1 4
就是說,如果你還有一個欄位是id,主鍵的話就是
select A,B,C,MAX(D) FROM TABLE GROUP BY B,C