누계 구하기 0 4 665

by 초보자 오라클 누계 [2020.09.17 13:10:33]


날짜 | 이름  |  장수  |  누적페이지
------------------------------ 
07.08 | A    |   2  |        
07.08 | B    |   3  |        
07.09 | B    |   3  |       
07.08 | C    |   2  |       
07.08 | D    |   1  |        
07.08 | E    |   1  |       
07.10 | E    |   1  |        
07.08 | F    |   4  |        

=================================================================
(원하는 결과1)
날짜 |   이름  |  장수  |  누적페이지                   
------------------------------ 
07.08 | A    |       2    |        2
07.08 | B    |       3    |        5
07.09 | B    |       3    |        5
07.08 | C    |       2    |        7
07.08 | D    |       1    |        8
07.08 | E    |       1    |        9
07.10 | E    |       1    |        9
07.08 | F    |       4    |        13

 

(원하는 결과2)
날짜 |   이름  |  장수  |  누적페이지                   
------------------------------ 
07.08 | A    |       2    |        2
07.08 | B    |       3    |        5
07.09 | B    |       3    |        
07.08 | C    |       2    |        7
07.08 | D    |       1    |        8
07.08 | E    |       1    |        9
07.10 | E    |       1    |        
07.08 | F    |       4    |        13

 

(Oracle 사용)

DB에는 이름과 장수,날짜만 저장이 되어있고 장수를 누적하여 누적페이지(열)에 계산하는게 목표(원하는결과 1or2)입니다.

sum(wkdtn) over( opder by 닐짜, 이름 Rows BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS 누적페이지

이런식으로 하니까 아래 결과처럼 누적은 되지만 같은 이름 (날짜,이름)에 대해서도 각각 누적을 시켜주더라구요..

같은 이름(이름, 날짜)은 한번만 누적을 해주는 방법이 있을까요?

날짜 |   이름  |  장수  |  누적페이지                   
------------------------------------------- 
07.08 | A    |       2    |        2
07.08 | B    |       3    |        5
07.09 | B    |       3    |        8
07.08 | C    |       2    |        10
07.08 | D    |       1    |        11
07.08 | E    |       1    |        12
07.10 | E    |       1    |        13
07.08 | F    |       4    |        17

 

by 마농 [2020.09.17 13:19:25]

이름이 동일한 건에 대한 설명이나 결과 예시가 이상합니다.
정확한 설명과 예시 올려 주세요.


by 초보자 [2020.09.17 14:06:10]

혹시 이런식으로 올렸는데  설명이 부족할까요?


by 마농 [2020.09.17 14:23:20]

"opder by 닐짜, 이름" 하셨는데?
"opder by 이름, 닐짜" 해야 맞는 것 아닌가요?

중복 이름을 모두 출력하면서 누적은 한번만 하게 하는 것보다
아예 중복 제거해서 한번만 출력하는게 낫지 않나요?


by 마농 [2020.09.17 14:23:32]
WITH t AS
(
SELECT '07.08' dt, 'A' nm, 2 cnt FROM dual
UNION ALL SELECT '07.08', 'B', 3 FROM dual
UNION ALL SELECT '07.09', 'B', 3 FROM dual
UNION ALL SELECT '07.08', 'C', 2 FROM dual
UNION ALL SELECT '07.08', 'D', 1 FROM dual
UNION ALL SELECT '07.08', 'E', 1 FROM dual
UNION ALL SELECT '07.10', 'E', 1 FROM dual
UNION ALL SELECT '07.08', 'F', 4 FROM dual
)
SELECT dt
     , nm
     , cnt
     , SUM(DECODE(rn, 1, cnt)) OVER(ORDER BY nm, dt) page_1
     , DECODE(rn, 1, SUM(DECODE(rn, 1, cnt)) OVER(ORDER BY nm, dt)) page_2
  FROM (SELECT dt, nm, cnt
             , ROW_NUMBER() OVER(PARTITION BY nm ORDER BY dt) rn
          FROM t
        )
;

 

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