안녕하세요.
DB쿼리를 짜다 막히는 부분이 있어서 문의 드립니다.
Merge TableA AS A
Using TableB AS B
On A.Num = B.Num
When Not Matched Then
Insert (Num,Name) Values (B.Num,B.Name)
When Matched Then
Update Set A.Num = B.Num, A.Name = B.Name;
이 Merge 쿼리는 2008 부터 지원이 된다고 들었습니다. 2008 하위 버전에서 이 쿼리를 대채할수 있는 쿼리문이 어떤게 있나요??
2번째 질문입니다.
A 테이블에서 B테이블로 옴기는 쿼리를 작성하였습니다. 하지만 A 테이블은 계속 데이터가 쌓이는 관계로 중복 데이터중 최신 데이터만 B테이블로 옴기고 싶습니다.
Insert Into B(Num,Name,CreateDate)
Select Num,Name,CreateDate From A
이쿼리를 이용하여 전체 데이터를 옴기는건 했는데 위의 조건처럼 Num 데이터 기준으로 중복되는 것중에 CreateDate가 최신인 것들만 옴기고싶습니다.
도와 주세요 ㅠㅠ
Comment 1
-
Terry
2016.06.24 13:39
1. SP (저장프로시저) 이용
--1) 변수 선언하구, Select 한 카운트 값을 변수에 할당
---- 예) Select @ll_cnt = count(1) From tblA a Inner Join tblB b On a.num = b.num
--2) 변수에 저장된 값을 토대로 IF 로 분기 처리
----A. 값이 없으면? ( ROW 가 없는거니 ..iNSERT 처리 )
----B. 값이 있으면? ( ROW 가 있는거니 UPDATE 처리.. )
2. 최신데이터만 옮기는거
--row_number() 이용..
--무조건 각 조건별로 최종 데이터만 넣는다는 기준으로..작성됨
Delete From B
Insert Into B(Num,Name,CreateDate)
Select ( Select Num,Name,CreateDate,Row_Number() Over ( Partition By Num,Name Order By CreateDate Desc) As rn From A) a
Where a.rn = 1
그럼..수고하세요~