다음과 같은 형식의 포인트 테이블 있습니다.
KEY(키), POINT(포인트), INSERT_DATE(적립/사용일), POINT_END_DATE(포인트 종료 일), STATUS(상태값)
적립 포인트는 STATUS = 02 , 사용 포인트는 STATUS = 04, 유효기간이 지난 포인트는 STATUS = 05
라고 한다면, 적립, 사용, 만료된 포인트 계산을 어떻게 해야 할까요 ?
저는 아래와 같이 뷰를 만들어서 계산하려고 했는데, 몇 몇 포인트에서 계산이 맞지 않네요 ..
쿼리 한번으로 계산이 가능할지 문의 드립니다.
CREATE VIEW POINT_VIEW AS
SELECT C.KEY,
NVL(C.SAVE_POINT,0) SAVE_POINT,
NVL(D.USE_POINT,0) USE_POINT,
NVL(C.SAVE_POINT,0) - NVL(D.USE_POINT,0) AVAILABLE_POINT,
CASE WHEN NVL(A.SAVE_POINT,0) - NVL(B.USE_POINT,0) > 0 THEN NVL(A.SAVE_POINT,0) - NVL(B.USE_POINT,0)
ELSE 0 END AS EXTINCTION_POINT
FROM (SELECT KEY,
SUM(POINT) SAVE_POINT
FROM COOKIZ_POINT
WHERE STATUS = '02'
AND POINT_END_DATE <= TO_CHAR(LAST_DAY(SYSDATE),'YYYYMMDD')
GROUP BY KEY) A,
(SELECT KEY,
SUM(POINT) USE_POINT
FROM COOKIZ_POINT
WHERE STATUS = '04'
AND INSERT_DATE <= SYSDATE
GROUP BY KEY) B,
(SELECT KEY,
SUM(POINT) SAVE_POINT
FROM COOKIZ_POINT
WHERE STATUS = '02'
GROUP BY KEY) C,
(SELECT KEY,
SUM(POINT) USE_POINT
FROM COOKIZ_POINT
WHERE STATUS = '04'
GROUP BY KEY) D
WHERE C.KEY = A.KEY(+)
AND C.KEY = B.KEY(+)
AND C.KEY = D.KEY(+)
|