쿼리질문 드립니다... 0 2 981

by 짱구 [SQL Query] [2017.01.03 10:23:50]


쿼리를 작성하다가... 궁금한 점이 있어 질문드립니다..

SELECT CASE WHEN 대출구분 != '추가대출' THEN SUM(상환및대출금액) OVER(partition by 사원번호,상환일자,대출구분 order by 사원번호,상환일자,대출구분) ELSE 0 END AS 누계액, 사원번호,상환일자,대출구분,상환및대출금액

FROL 대출테이블 

WHERE 1=1

 

대출구분에는 상환, 추가대출이 있습니다.

이런식으로 상환액을 누계액으로 구하고있는데...

사원번호   상환일자  대출구분 상환및대출금액 누계액

A          2017-01-01   상환         100000       100000

A          2017-01-02  추가대출    1200000         0

A         2017-01-03   상환           100000      200000

 

지금 데이터가 이렇게 나오는데.. 1월 2일에 누계액을 1월1일에 나오는 100000으로 보여주고싶습니다...

어떻게 작성해야되는지 도움 부탁드립니다!

감사합니다!

 

 

by 마농 [2017.01.03 10:37:52]

글쎄요?
1. 작성하신 쿼리의 Over 절 안쪽 구문이 전혀 맞질 않는데요?
  - Partition By 와 Order By 에 (사원번호,상환일자,대출구분)이 모두 들어가 있네요?
  - 이렇게 해서는 위와 같은 결과가 나올리가 없는데요?
  - (PARTITION BY 사원번호, 대출구분 ORDER BY 상환일자) 해야 위의 결과가 나올 듯 하구요.
2. 질문하신 부분은
  - CASE 와 SUM 의 위치가 바뀌었네요.
  - CASE(SUM) 이 아니라 SUM(CASE) 하셔야 합니다.
  - (PARTITION BY 사원번호 ORDER BY 상환일자) 해야 하구요.

SELECT 사원번호, 상환일자, 대출구분, 상환및대출금액
     , SUM(CASE WHEN 대출구분 != '추가대출' THEN 상환및대출금액 ELSE 0 END)
       OVER(PARTITION BY 사원번호 ORDER BY 상환일자) AS 누계액
  FROM 대출테이블
 WHERE 1=1
;

 


by 짱구 [2017.01.03 10:52:03]

쿼리를 작성하기 시작한지 얼마 안되서...작성을 잘못했는데.. 그걸 이해하셔서 해결에 답을 주셔서 정말 감사드립니다! 덕분에 문제 잘 해결했습니다! 정말감사합니다

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