建立測試資料
CREATE TABLE #Temp (Id INT, Name VARCHAR(50), Age INT, Sex BIT DEFAULT 1);
INSERT #Temp VALUES
(1,'James',25,1),(1,'James',25,1),(1,'James',25,1),
(2,'Lisa',24,0),(2,'Lisa',24,0),(2,'Lisa',24,0),
(3,'Mirsa',23,0),(3,'Mirsa',23,0),(3,'Mirsa',23,0),
(4,'John',26,1),(5,'Abraham',28,1),(6,'Lincoln',30,1);
刪除重複語句 (保留每組第一筆)
DELETE t
FROM (
SELECT ROW_NUMBER() OVER (PARTITION BY Id, Name, Age, Sex ORDER BY Id) AS rn, *
FROM #Temp
) t
WHERE t.rn > 1;
驗證結果
SELECT * FROM #Temp;
-- 僅保留 6 筆唯一資料
關鍵點
PARTITION BY 列出判斷重複的所有欄位。
ORDER BY 決定保留哪一筆 (此處按 Id 保留第一筆)。
- 衍生表別名
t 直接作為 DELETE 目標,無需臨時表/游標。