WITH 테이블 AS ( SELECT '1' AS 키값, 2521 AS 수량 UNION ALL SELECT '2' AS 키값, 2220 AS 수량 ), 임시테이블 AS ( SELECT '1' AS RN, 2 AS AMT UNION ALL SELECT '2' AS RN, 2 AS AMT UNION ALL SELECT '3' AS RN, 2 AS AMT ) ,TEMP AS ( SELECT T1.키값, T2.RN ,T1.수량 ,T1.수량 * (T2.AMT / SUM(T2.AMT) OVER(PARTITION BY T1.키값)) AS 배분_소수점 ,ROUND(T1.수량 * (T2.AMT / SUM(T2.AMT) OVER(PARTITION BY T1.키값)),0) AS 배분 FROM 테이블 T1 ,임시테이블 T2 ) SELECT 키값, RN, 수량 , 배분_소수점 , 배분 , 배분 + CASE WHEN RN = 1 THEN 수량 - SUM(배분) OVER(PARTITION BY 키값) ELSE 0 END AS 결과값 FROM TEMP ORDER BY 키값, RN
대략 이런 식으로 처리하면 될듯 합니다.
제가 정확하게 이해한 거라면... 흠....
WITH t1 AS ( -- Case 1 -- SELECT 1 no, 4 amt UNION ALL SELECT 2, 2 -- Case 2 -- --SELECT 1 no, 2 amt --UNION ALL SELECT 2, 2 --UNION ALL SELECT 3, 2 ) , t2 AS ( SELECT 1 id, 2521 cnt UNION ALL SELECT 2, 2220 ) SELECT a.id , a.cnt , b.no , b.amt , a.cnt * amt / s + CASE WHEN a.id = 1 THEN a.cnt - SUM(a.cnt * amt / s) OVER(PARTITION BY a.id) ELSE 0 END x FROM t2 a CROSS JOIN (SELECT no, amt, SUM(amt) OVER() s FROM t1) b ORDER BY a.id, b.no ;