database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 41425 게시물 읽기
No. 41425
만료 포인트 계산 쿼리 질문
작성자
박주영(vf19)
작성일
2017-06-19 22:09
조회수
2,358

 다음과 같은 형식의 포인트 테이블 있습니다. 

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(+)

 

이 글에 대한 댓글이 총 1건 있습니다.

SELECT SUM(CASE WHEN status IN ('02', '05') THEN point END) save_point
     , SUM(CASE status WHEN '04' THEN point END) use_point
     , SUM(CASE status WHEN '05' THEN point END) end_point
     , SUM(CASE status WHEN '02' THEN point WHEN '04' THEN -point END) available_point
  FROM cookiz_point
 WHERE insert_date <= sysdate
 GROUP BY key
;

마농(manon94)님이 2017-06-20 21:35에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
41431oracle client설치 시 질문
oracle
2017-06-20
2502
41430cpan으로 DBD::Oracle 설치 오류
oracle
2017-06-20
2248
41427안녕하세요. 오라클 레퍼런스 북에 있는 db 활용해 공부하려는데요.
전설
2017-06-20
2271
41425만료 포인트 계산 쿼리 질문 [1]
박주영
2017-06-19
2358
41424오라클클라이언트 12.2.0 과 12.1.0 차이
오라클
2017-06-19
2501
41423두개 Table row Count 비교 하기 [1]
jp
2017-06-15
2913
41422오라클 시험준비해야하는데 문제푸는거 도와주실분 계씬가요 ㅠㅠ
쀼쀼
2017-06-12
2401
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2019 DSN, All rights reserved.
작업시간: 0.073초, 이곳 서비스는
	PostgreSQL v11.5로 자료를 관리합니다