쿼리를 작성하다가... 궁금한 점이 있어 질문드립니다..
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으로 보여주고싶습니다...
어떻게 작성해야되는지 도움 부탁드립니다!
감사합니다!
글쎄요?
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 ;