쿼리 질문드립니다. 각 로우 남은금액 1 4 2,701

by 손님 [SQL Query] 쿼리 query [2010.03.11 09:49:14]


안녕하세요. 눈팅만하다가 도움을 구하고자 처음으로 질문을 올립니다.

WITH t AS
(
SELECT  '2010-02-28'   as year, 1000000 as amount FROM dual UNION ALL
SELECT  '2010-03-01' , 100000  FROM dual UNION ALL
SELECT  '2010-03-02' , 200000 FROM dual UNION ALL
SELECT  '2010-03-03',  300000 FROM dual UNION ALL
SELECT  '2010-03-04',  400000 FROM dual
)

위와 같은 날짜와 금액컬럼을 갖고 있는 데이터가 있다고 가정했을때

쿼리를 하여 아래 처럼 각 로우마다 남은금액이 나오게 하고싶은데요.

(남은 금액 = 이전 로우의 남은금액 - 현재 로우의 amount
   단, 첫라인은 현재 amount 가 남은금액 )


year       amount   남은금액
-----------------    -------------  ----------------
2010-02-28 1000000    1000000
2010-03-01   100000   900000
2010-03-02   200000   700000
2010-03-03   300000   400000
2010-03-04   400000    0

위와 같이 하려면 어떻게 해야하나요.

부탁드릴께요.

by 서성우 [2010.03.11 10:16:30]
WITH t AS
(
SELECT '2010-02-28' as year, 1000000 as amount FROM dual UNION ALL
SELECT '2010-03-01' , 100000 FROM dual UNION ALL
SELECT '2010-03-02' , 200000 FROM dual UNION ALL
SELECT '2010-03-03', 300000 FROM dual UNION ALL
SELECT '2010-03-04', 400000 FROM dual
)
SELECT YEAR ,
amount ,
Sum(Decode(ROWNUM,1,amount,amount*-1)) over(ORDER BY YEAR)
FROM t

by 질문자 [2010.03.11 10:19:54]
감사합니다!

by sd [2010.03.16 13:04:02]
질문이 있는데요
Sum(Decode(ROWNUM,1,amount,amount*-1)) over(ORDER BY YEAR)

에서 amount *-1 이 어떤 의미 인가요?? 왜 이런 결과가 나오는거져??

by 질문자 [2010.03.16 14:20:13]
위의 질문 내용을 보시면
"(남은 금액 = 이전 로우의 남은금액 - 현재 로우의 amount
단, 첫라인은 현재 amount 가 남은금액 )"
위 조건의 " - 현재 로우의 amount " 부분 입니다.

YEAR 순으로 누적 합계를 구하되
첫번째 로우일 경우는 금액을
나머지 로우에선 -금액을
더해라
라는 의미 같습니다.
댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입