[MS-SQL] SELECT의 결과 값을 UPDATE에 사용하기 – With 사용법

이게 조금 복잡한데…

우선 A라는 테이블의 데이터를 UserID, SUM(Value)로 합산한 결과 값이 있다.

UserIDSUM(Value)
aaa1000
bbb2000
ccc300

이걸
B라는 테이블에 업데이트를 하려고 한다.

보통 한개의 결과 값만 있다면
Where 로 UserID를 매치 시키면 해결이 됐지만….
이 경우

Update TableA Set Value = Sum(value) --SUM 사용 불가
FROM TableA A Join TableB B
On A.UserID = B.UserID

에서 Sum 사용 불가 오류가 났다.

그러다 알게된 것이 With …

With TableC(UserID, Val) AS
(
  Select A.UserID, IsNull(Sum(B.Val), 100) From TableA A Left Outer Join TableB B on A.UserID = B.UserID Group By A.UserID
)
Update TableA Set Value = val
FROM TableA A join TableC C
on A.UserID = C.UserID

사용법 요약

WITH 테이블(컬럼1, 컬럼2, ...) AS
(
  SELECT 컬럼....
)

 ( ) 안의 셀렉트문에 나온 컬럼들을 WITH 에 적힌 테이블이름 (컬럼 순서) 로 만들어주고
이걸 Update문의 Join 에 사용할 수 있다.