程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> T-SQL 篩選刪除重復記錄並保留一條

T-SQL 篩選刪除重復記錄並保留一條

編輯:關於SqlServer
以下為,實現此操作的通用T-sql模版:

/*delete from a FROM --刪除表a (a 是引用的需要刪除的表)
(
select ROW_NUMBER() over -- ROW_NUMBER() over 是一個整體 產生一個從一開始的自增列
(
partition by 重復列1, 重復列2, 重復列3 --,重復列n partition by 跟group by 大同小異 但是並不是聚合函數 是顯示所有的記錄,包括重復的
order by 重復列1, 重復列2, 重復列3 --,重復列n order by 跟 ROW_NUMBER() over 連用
) RowNumber --RowNumber 給括號裡 ROW_NUMBER 返回結果列 的一個別名
from 表名) a --a 結果表的別名
where a.RowNumber > 1 -- 表a 裡的RowNumber的值大於1(記錄在一條以上的標識重復)*/



接下來是實現此操作的一段事例代碼:

CREATE DATABASE Test

go

USE Test

go

CREATE TABLE #Test ( id UNIQUEIDENTIFIER, NAME NVARCHAR(20), pwd NVARCHAR(20) )

INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'zhangsan','zhangsan')

INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'zhangsan','zhangsan1')

INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'zhangsan','zhangsan')

INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'zhangsan','zhangsan')

INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi')

INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi')

INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi1')

INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi')

INSERT INTO #Test( id, NAME, pwd )VALUES (NEWID(),'lisi','lisi')

SELECT * FROM #Test

--查詢出排除重復記錄,保留一條後的結果,以便加以對比測試

SELECT * from

(select ROW_NUMBER() over

(

partition by name, pwd

     order by name, pwd

) RowNumber,* from #Test

) a where a.RowNumber > 1

--執行刪除操作(刪除重復記錄,保留一條)

delete from a from

(select ROW_NUMBER() over

(

partition by name, pwd

     order by name, pwd

) RowNumber from #Tes

) a where a.RowNumber > 1
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved