날짜 | 이름 | 장수 | 누적페이지 ------------------------------ 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
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 ) ;