본문 바로가기

DBMS/SQL Server

[SQL Server] 중복된 Row 제거하기

 

이미 데이터가 저장된 테이블에 Primary Key나 Unique 인덱스를 만들고 싶지만 중복된 로우가 있으면 

에러가 발생한다. 이럴경우 중복된 Row를 제거하여 보자.

 

 -- 테스트를 위해 테이블을 생성

 CREATE TABLE dbo.TEST_TBL (

    NUM INT NOT NULL

  , ID VARCHAR(32) NOT NULL

 )

 GO

 

 

 -- 중복된 데이터를 삽입

 INSERT INTO dbo.TEST_TBL (NUM, ID)

 VALUES (1, 'APPLE'), (2, 'BANANA'), (2, 'GRAPE')

 GO

 

 

 /* Primary Key 제약조건추가

    NUM 컬럼은 중복된 값을 가지고 있으므로 오류가 발생*/

 ALTER TABLE dbo.TEST_TBL

 ADD CONSTRAINT PK_TEST_TBL PRIMARY KEY (NUM)

 GO

 

 

 -- 중복된 값 찾기

 SELECT NUM

 FROM dbo.TEST_TBL

 GROUP BY NUM

 HAVING COUNT(*) > 1

 GO

 

 

 -- 중복 된 값 확인

 SELECT * FROM dbo.TEST_TBL

 WHERE NUM = 2

 GO

 

 

 -- 중복된 값을 다른 값으로 변경

 UPDATE dbo.TEST_TBL

 SET NUM = 3

 WHERE ID = 'GRAPE'

 GO

 

 

 -- Primary Key 제약조건 다시 추가

 ALTER TABLE dbo.TEST_TBL

 ADD CONSTRAINT PK_TEST_TBL PRIMARY KEY (NUM)

 GO