MSSQL 사용중입니다.
Table1의 A_Qty를 기준으로 해서 Table2의 B_Qty을 배분 하려고 합니다.
예를 들면.. Table1 조회 시
첫번째 행 (A_Seq = 1) 동일한 Sort를 Table2에서 찾아서, A_Qty가 8개니까 Table2의 1행까지의 B_Qty를 Table1의 첫번째 행에 배분한다
두번째 행 (A_Seq = 2) 동일한 Sort를 Table2에서 찾아서, A_Qty가 8개니까 Table2의 2~4행까지의 B_Qty를 Table1의 두번째 행에 배분하고 Table2 4번행의 B_Qty는 5개로 잔량을 남긴다
세번째 행 (A_Seq = 3) 동일한 Sort를 Table2에서 찾아서, A_Qty가 8개니까 Table2의 4~5행까지의 B_Qty를 Table1의 두번째 행에 배분하고 Table2 5번행의 B_Qty는 6개로 잔량을 남긴다
배분이 종료되고 Table2에 잔량이 남았다면 동일한 Sort의 Table1 데이터 중 A_Seq가 가장 작은 값에 잔량을 모두 더해준다
이런 로직을 구현하고 싶은데,,, 어떻게 시작해야 될지 도통 모르겠네요...
WITH t1 AS
(
SELECT 1 a_seq, 100 a_serl, 8 a_qty, 10 b_seq, 1 b_serl, 1 sort, 20250201 date
UNION ALL SELECT 2, 200, 8, 10, 1, 2, 20250202
UNION ALL SELECT 3, 300, 8, 10, 1, 2, 20250202
)
, t2 AS
(
SELECT 10 b_seq, 1 b_serl, 1 b_subserl, 1 sort, 8 b_qty
UNION ALL SELECT 10, 1, 2, 2, 4
UNION ALL SELECT 10, 1, 3, 2, 3
UNION ALL SELECT 10, 1, 4, 2, 6
UNION ALL SELECT 10, 1, 5, 2, 9
)
SELECT a.a_seq
, a.a_serl
, CASE WHEN a.a_qty_s <= b.b_qty_s THEN a.a_qty
WHEN a.a_qty_s - a.a_qty <= b.b_qty_s THEN b.b_qty_s - a.a_qty
ELSE 0 END
+ CASE WHEN a.a_qty_t < b.b_qty_s AND rn = 1
THEN b.b_qty_s - a.a_qty_t
ELSE 0 END
AS b_qty
FROM (SELECT a_seq, a_serl, a_qty
, b_seq, b_serl, sort
, SUM(a_qty) OVER(PARTITION BY sort) a_qty_t
, SUM(a_qty) OVER(PARTITION BY sort ORDER BY a_seq, a_serl) a_qty_s
, ROW_NUMBER() OVER(PARTITION BY sort ORDER BY a_seq, a_serl) rn
FROM t1
) a
LEFT OUTER JOIN
(SELECT b_seq, b_serl, sort
, SUM(b_qty) b_qty_s
FROM t2
GROUP BY b_seq, b_serl, sort
) b
ON a.b_seq = b.b_seq
AND a.b_serl = b.b_serl
AND a.sort = b.sort
;