누적 합계 쿼리 질문드립니다..
월별로 합산되는 데이터를 만들려고합니다. 계산해서 로우로 깔아주어야 하는데
해결을 못하고있습니다.. 도움 부탁합니다
11월 에는 BASE + 수량
12월 에는 11월 결과 + 수량
1월 에는 12월 결과 + 수량
BASE 수량은 첫 월에만 활용합니다.
이렇게 합산되도록 하려하는데.. 결국 해결을 못했습니다.. 로직조언 부탁드립니당..
WITH temp AS ( SELECT '이강인' AS MEMBER, '10' BASE수량, '202311' AS MONTH , '20' 수량 , 10+20 AS 원하는결과 FROM DUAL UNION ALL SELECT '손흥민' AS MEMBER, '10' BASE수량, '202311' AS MONTH , '30' 수량 , 10+30 AS 원하는결과 FROM DUAL UNION ALL SELECT '이강인' AS MEMBER, '10' BASE수량, '202312' AS MONTH , '20' 수량 , 10+20+20 AS 원하는결과 FROM DUAL UNION ALL SELECT '손흥민' AS MEMBER, '10' BASE수량, '202312' AS MONTH , '30' 수량 , 10+30+30 AS 원하는결과 FROM DUAL UNION ALL SELECT '이강인' AS MEMBER, '10' BASE수량, '202313' AS MONTH , '20' 수량 , 10+20+20+20 AS 원하는결과 FROM DUAL UNION ALL SELECT '이강인' AS MEMBER, '10' BASE수량, '202313' AS MONTH , '30' 수량 , 10+30+30+30 AS 원하는결과 FROM DUAL ) SELECT * FROM TEMP
MEMBER | BASE수량 | MONTH | 수량 | 원하는결과 |
이강인 | 10 | 202311 | 20 | 30 |
손흥민 | 10 | 202311 | 30 | 40 |
이강인 | 10 | 202312 | 20 | 50 |
손흥민 | 10 | 202312 | 30 | 70 |
이강인 | 10 | 202313 | 20 | 70 |
이강인 | 10 | 202313 | 30 | 100 |
WITH temp AS ( SELECT '이강인' mbr, 10 base수량, '202311' ym, 20 수량 FROM dual UNION ALL SELECT '손흥민', 10, '202311', 30 수량 FROM dual UNION ALL SELECT '이강인', 10, '202312', 20 수량 FROM dual UNION ALL SELECT '손흥민', 10, '202312', 30 수량 FROM dual UNION ALL SELECT '이강인', 10, '202313', 20 수량 FROM dual UNION ALL SELECT '이강인', 10, '202313', 30 수량 FROM dual ) SELECT mbr, base수량, ym, 수량 , base수량 + SUM(수량) OVER(PARTITION BY mbr ORDER BY ym, ROWNUM) 누적수량 FROM temp ORDER BY ym, mbr, ROWNUM ;
1. 원하는 결과를 얻으려면 분석함수 사용하면 됩니다.
- 분석 함수 사용시 이강인의 13월이 2건인데 어느 행이 먼저인지? 구분할 수 있는 항목이 필요합니다.
- 저는 ROWNUM 을 이용했지만. 테이블에서 해당 역할을 하는 항목으로 대체하시는 것을 추천합니다.
2. 명칭 사용 주의사항
- member, month 등 예약어 사용은 지양해야 합니다.
- 단어를 그대로 사용하는 것 보다는 약어 사용이나 단어 결합 형태로 사용하시는 게 좋습니다.