parm1 : XXX
table A
A1 | A2
100 | 200
300 | 100
A테이블의 A1, A2 컬럼을 parm1과 계산하여 데이터 변경을 하려고 합니다.
parm1 데이터와 A1을 계산(A1-parm1)하여 + : A1 = (A1-parm1), parm1 = 0, loop 중지
- : A1 = 0, parm1=ABS(A1-parm1), loop 계속
0 : A1 =0 , parm1=0, loop 중지
위에서 parm1의 값이 남아있다면
parm1 데이터와 A2을 계산(A2-parm1)하여 + : A2 = (A2-parm1), parm1 = 0, loop 중지
- : A2 = 0, parm1=ABS(A2-parm1), loop 계속
0 : A2 =0 , parm1=0, loop 중지
이 결과 값은 A 테이블에 update를 하고 싶습니다.
아니면 같음 구조의 테이블 B를 만들어 A위의 결과를 insert 하고 싶습니다.
CSRSOR 와 FOR LOOP를 사용하면 될듯하데.. 생각보다 잘 않되는군요...
WITH t AS ( SELECT 1 rn, 100 a1, 200 a2 FROM dual UNION ALL SELECT 2, 300, 100 FROM dual ) SELECT * FROM (SELECT gb, rn , CASE WHEN b - p < 0 THEN 0 WHEN b - p > a THEN a ELSE b - p END a FROM (SELECT 500 p , gb, rn, a , SUM(a) OVER(ORDER BY gb, rn) b FROM t UNPIVOT (a FOR gb IN (a1, a2)) ) ) PIVOT (MIN(a) FOR gb IN ('A1' a1, 'A2' a2)) ;