안녕하세요.
테이블에 UPDATE 쿼리를 사용할때 LAG, LEAD 함수를 사용하려고 했는데
분석함수는 조회쿼리에서만 사용할 수 있다고 하더라고요,,
UPDATE TEST SET COLUMN = CASE WHEN LAG(TEST_COLUMN,1) OVER ( ORDER BY COL ASC ) = 'Y' THEN 1 WHEN LAG(TEST_COLUMN,2) OVER ( ORDER BY COL ASC ) = 'Y' THEN 2 WHEN LAG(TEST_COLUMN,3) OVER ( ORDER BY COL ASC ) = 'Y' THEN 3 ELSE 0 END ;
다음과 같은 UPDATE 쿼리에서 LAG 대신 다른 방법이 있을까요?
MERGE문을 사용하면 USING절에서 SELECT가 가능하니 이를 응용해 보는게 어떨까요?
MERGE INTO EMP A
USING (
SELECT EMPNO,ENAME
,LAG(SAL,1) OVER(ORDER BY EMPNO) LAG_SAL
FROM EMP
WHERE 1=1
AND DEPTNO='20'
) B
ON (A.EMPNO=B.EMPNO)
WHEN MATCHED THEN
UPDATE SET A.SAL=B.LAG_SAL
WHEN NOT MATCHED THEN
INSERT (EMPNO,ENAME,SAL) VALUES(B.EMPNO,B.ENAME,B.LAG_SAL)
WHERE 1=2 --INSERT문 무효화