国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > 綜合 > 正文

MSSQL如何在沒有主鍵的表中刪除重復數據

2024-07-21 02:49:51
字體:
來源:轉載
供稿:網友
MSSQL如何在沒有主鍵的表中刪除重復數據

為了對重復數據進行實驗,下面建一個設計不太好(沒有主鍵)表并插入了一些重復數據:

create database testdbuse testdb ;gocreate table DupsNoPK(Col1 int Null, Col2 char(5) Null);goinsert DupsNoPK(Col1,Col2)Values(1,'abc'),      (2,'abc'),      (2,'abc'),      (2,'abc'),      (7,'xyz'),      (7,'xyz');

為了驗證表確實有重復數據,下面查詢運用了一個group by 和having 子句只返回重復行,并對副本計數:

select Col1,Col2,Count(*) AS DupCountfrom DupsNoPKgroup by Col1,Col2having count(*)>1;

結果:

下面是運用窗口化刪除重復行:

這種方法的關鍵是運用窗口化的,有row_number()函數和分區的over()子句。每個新分區會重新編號。設置over()子句為partition by每個要檢查重復數據的列。在這種情況下每一列都會進行檢查。

運行窗口化查詢,首先顯示方法如何應用于行號:

select Col1,Col2, row_number()over(partition by Col1,Col2 order by Col1)as rn from DupsNoPK

結果:

每一個重復行都有一個比1大的rn值,所以,刪除副本是比較容易的:

with DupsNumberedas(   select Col1,Col2,          row_number()over(partition by Col1,Col2 order by Col1) as rn   from DupsNoPK   )delete DupsNumbered where rn>1;

結果:

執行完上面語句后,下面用一條select語句測試刪除重復數據的結果:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 垣曲县| 泉州市| 靖江市| 大荔县| 阿拉善盟| 凌源市| 通州市| 维西| 郓城县| 乌兰察布市| 枝江市| 公主岭市| 报价| 南康市| 丹巴县| 合江县| 和硕县| 鱼台县| 边坝县| 轮台县| 宜良县| 武隆县| 东安县| 翼城县| 吉林省| 玛纳斯县| 乳源| 伊金霍洛旗| 鄂伦春自治旗| 巨野县| 伊宁市| 侯马市| 武山县| 铜川市| 赤峰市| 资中县| 桐乡市| 靖州| 沾化县| 苗栗县| 济源市|