国产探花免费观看_亚洲丰满少妇自慰呻吟_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語句測試刪除重復數據的結果:


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 石泉县| 长治市| 卢龙县| 全南县| 紫金县| 句容市| 耒阳市| 莫力| 蕲春县| 平果县| 临朐县| 鹤庆县| 石屏县| 科尔| 上林县| 安溪县| 仙桃市| 砀山县| 合作市| 泸水县| 广水市| 嵩明县| 固安县| 平原县| 平远县| 会同县| 大关县| 天等县| 兴安县| 城步| 贺兰县| 繁昌县| 合川市| 资溪县| 阿合奇县| 郁南县| 嫩江县| 蒲江县| 固安县| 承德市| 庆阳市|