구분 | qty | amt | rcv_qty | rcv_amt | rcvqty누계 | rcvamt누계 | 원하는 값 |
K | 8432 | 4281.7 | 657 | 394.2 | 8432 | 4281.7 | -7775 |
K | 8432 | 4281.7 | 7775 | 3887.5 | 8432 | 4281.7 | 0 |
D | 7758 | 16291.8 | 7758 | 16291.8 | 7758 | 16291.8 | 0 |
F | 7681 | 2688.35 | 0 | 0 | 7037.9 | 2483.63 | -7681 |
F | 7681 | 2688.35 | 219.6 | 70.86 | 7037.9 | 2483.63 | -7461.4 |
F | 7681 | 2688.35 | 6509 | 2300.94 | 7037.9 | 2483.63 | -952.4 |
F | 7681 | 2688.35 | 309.3 | 111.83 | 7037.9 | 2483.63 | -643.1 |
그게 문제예요 ㅠㅠ
이게 각 구분의 rcv_qty - qty를 하는건 맞는데요.
각 구분이 끝날때 쯤에 sum(rcv_qty) 가 qty와 같으면 0이 되야 되는거라서요..ㅠ
첫번째 row만 rcv_qty - qty 이렇게 하는게 맞고 그 다음 row 부터는 rcv_qty - qty 의 누계 값에서
누계값 - rcv_qty를 해야 되거든요..
그래서 dense_rank 를 넣어서 이것저것 해봤는데..
이게 지금 제가 되는지 안되는지 조차.. 감이 잘 안와요..
엑셀로 컬럼을 더해보고 빼보고 데이터 예상되는 값을
출력해 보고 별짓 다하는데 모르겠어요 ㅠㅠ
num | 구분 | qty | amt | rcv_qty | rcv_amt | rcvqty누계 | rcvamt누계 | rcv_qty - qty |
1 | K | 8432 | 4281.7 | 657 | 394.2 | 8432 | 4281.7 | -7775 |
2 | K | 8432 | 4281.7 | 7775 | 3887.5 | 8432 | 4281.7 | 0 |
1 | D | 7758 | 16291.8 | 7758 | 16291.8 | 7758 | 16291.8 | 0 |
1 | F | 7681 | 2688.35 | 0 | 0 | 7037.9 | 2483.63 | -7681 |
2 | F | 7681 | 2688.35 | 219.6 | 70.86 | 7037.9 | 2483.63 | -7461.4 |
3 | F | 7681 | 2688.35 | 6509 | 2300.94 | 7037.9 | 2483.63 | -952.4 |
4 | F | 7681 | 2688.35 | 309.3 | 111.83 | 7037.9 | 2483.63 | -643.1 |
WITH t(구분, num, qty, rcv_qty) AS ( SELECT 'K', 1, 8432, 657.0 UNION ALL SELECT 'K', 2, 8432, 7775.0 UNION ALL SELECT 'D', 1, 7758, 7758.0 UNION ALL SELECT 'F', 1, 7681, 0.0 UNION ALL SELECT 'F', 2, 7681, 219.6 UNION ALL SELECT 'F', 3, 7681, 6509.0 UNION ALL SELECT 'F', 4, 7681, 309.3 ) SELECT a.구분, a.num, a.qty, a.rcv_qty , SUM(b.rcv_qty) - a.qty AS 원하는값 FROM t a INNER JOIN t b ON a.구분 = b.구분 AND a.num >= b.num GROUP BY a.구분, a.num, a.qty, a.rcv_qty ORDER BY a.구분, a.num ;