2014-06-12 1 views
1

ID, 계정 이름 및 기본 키의 세 열이이 테이블에 있습니다. ID와 계정 이름이 같지만 기본 키인 PK가 증가한 경우 일부 항목이 중복되었습니다.고유 한 기본 키를 기반으로 중복 SQL 항목 삭제

가장 낮은 PK (기본 키)가있는 항목을 제외하고 모든 중복 항목을 삭제하고 싶습니다. 나는 하나를 제외하고 모두 삭제하는 방법을

ID   Account Name   PK 
18380  _srvSQL    1724 
18380  _srvSQL    8454 
18380  _srvSQL    10333 
18380  _srvSQL    9903 
18380  _srvSQL    10274 
20993  _svc_MOSS_search  2595 
20993  _svc_MOSS_search  9235 
21020  _svc_MOSS_WSS   2589 
21020  _svc_MOSS_WSS   9244 
22251  _SVC_QA_SP_PortalAP 3659 
22251  _SVC_QA_SP_PortalAP 9590 
22681  _Svc_SQL_AS_Prod  4269 
22681  _Svc_SQL_AS_Prod  9678 
20136  _svcBIAdmin   1628 
20136  _svcBIAdmin   11080 
20136  _svcBIAdmin   8913 
18456  _svcBizTalk   9923 
18456  _svcBizTalk   10294 
18456  _svcBizTalk   10353 

그래서 나는 모든 중복 항목과 구별되는 기본 키의를 볼 수 있습니다 : 여기

난 그냥이 데이터를 검색하기 위해 쓴 쿼리의 결과의 예 테이블에서 가장 낮은 Primary Key를 가지고 있습니까?

답변

3
WITH t AS (SELECT ROW_NUMBER() OVER(PARTITION BY ID ORDER BY PK) n FROM MyTable) 
DELETE FROM t WHERE n > 1 
+3

그런 다음 중복 된 이름을 유지하기 위해 'ID'와 '계정 이름'에 고유 한 제약 조건을 만듭니다. – Bryan