가끔 여러 개의 값들 중 중복된 값을 제외한 유일한 값을 찾아야 할 때가 있다.
이 경우 DISTINCT 키워드를 주로 사용한다.
그러나 유일한 값을 찾는 방법은 많다.
-- 테스트를 위해 테이블 생성 CREATE TABLE #SALES_DETAILS ( SALES_ID INT IDENTITY(1,1) , ITEM_ID INT NOT NULL , QTY INT NOT NULL , UNIT_PRICE DECIMAL(12,2) NOT NULL , SALES_DATE DATETIME NOT NULL ) GO
-- 데이터 삽입 INSERT INTO #SALES_DETAILS (ITEM_ID,QTY,UNIT_PRICE,SALES_DATE) SELECT 1001,5,200,'2012-09-03 11:16:28' UNION ALL SELECT 1001,2,200,'2012-09-04 19:22:11' UNION ALL SELECT 1002,15,1300,'2012-09-06 14:26:40' UNION ALL SELECT 1003,8,78,'2012-09-19 15:11:19' UNION ALL SELECT 1001,6,200,'2012-09-22 16:36:11' UNION ALL SELECT 1004,22,1000,'2012-09-23 16:51:34' UNION ALL SELECT 1004,11,1000,'2012-09-23 17:29:38' UNION ALL SELECT 1002,29,1300,'2012-09-23 18:20:10' UNION ALL SELECT 1002,6,1300,'2012-09-26 19:40:41' UNION ALL SELECT 1002,33,1300,'2012-09-30 20:26:29' GO |
유일한 값을 얻기 위해 여러가지 방법을 사용해보자.
-- DISTINCT 키워드 사용 SELECT DISTINCT ITEM_ID FROM #SALES_DETAILS GO
-- GROUP BY 절 사용 SELECT ITEM_ID FROM #SALES_DETAILS GROUP BY ITEM_ID GO
-- 같은 테이블 UNION SELECT ITEM_ID FROM #SALES_DETAILS UNION SELECT ITEM_ID FROM #SALES_DETAILS GO
-- ROW를 SELECT 하지 않는 테이블과 UNION SELECT ITEM_ID FROM #SALES_DETAILS UNION SELECT ITEM_ID FROM #SALES_DETAILS WHERE 1=0 GO
-- 공집합 테이블과 UNION SELECT ITEM_ID FROM #SALES_DETAILS UNION SELECT 0 WHERE 1=0 GO
-- ROW_NUMBER() 함수 사용 SELECT ITEM_ID FROM ( SELECT ROW_NUMBER() OVER (PARTITION BY ITEM_ID ORDER BY ITEM_ID) AS SNO, * FROM #SALES_DETAILS ) AS T WHERE SNO = 1 GO |
모든 쿼리는 아래의 결과와 같음을 확인할 수 있다.
'DBMS > SQL Server' 카테고리의 다른 글
[SQL Server] DELETE, TRUNCATE의 IDENTITY 초기화 여부 (0) | 2013.04.08 |
---|---|
[SQL Server] NULL의 크기 (0) | 2013.04.05 |
[SQL Server] 랜덤 출력 NEWID 함수 (0) | 2013.03.30 |
[SQL Server] 에러 메시지를 원하는 언어로 변경하기 (0) | 2013.03.30 |
[SQL Server] FULL SCAN 하는 SP 찾기 (0) | 2013.03.30 |