로우에 누적합계 표현해주는 로직 작성중인데 도움 부탁드립니다. 0 2 2,188

by 새싹 [SQL Query] [2023.11.08 11:11:06]


누적 합계 쿼리 질문드립니다..

월별로 합산되는 데이터를 만들려고합니다. 계산해서 로우로 깔아주어야 하는데

해결을 못하고있습니다.. 도움 부탁합니다

 

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
by 마농 [2023.11.08 12:25:54]
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 등 예약어 사용은 지양해야 합니다.
- 단어를 그대로 사용하는 것 보다는 약어 사용이나 단어 결합 형태로 사용하시는 게 좋습니다.


by 새싹 [2023.11.08 12:44:02]

감사합니다,

PARTITION BY 를 설정하지않아서, 수량이 원하는대로 나오지 않았던거네요..

해도해도 빠르게 방법이 떠오르지않아 걱정입니다.. 오늘도 도움 감사합니다!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입