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가 가장 작은 값에 잔량을 모두 더해준다
이런 로직을 구현하고 싶은데,,, 어떻게 시작해야 될지 도통 모르겠네요...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | 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 ; |