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 39968 게시물 읽기
No. 39968
특정 합계점수로 포인트주는 쿼리 관련 문의 드립니다.
작성자
my(1111)
작성일
2013-01-11 10:14
조회수
6,779

 배치로 프로시저를 실행할 계획인데요,,

매일 저녁 한번씩 고객의 포인트를 합계해서 아래와 같이 추가로 포인트를 더 주는건데요..
 
쿼리,로직...고민입니다.
 
 
합계(기준)포인트   : 300 500 750 1000 1500점 부터는 500점 단위로
추가(지급)포인트   : 100 100 200 300 500점씩...
 
위처럼 데이터를 추출하는 것도 어려운데,,
 
위 방식대로 포인트를 계산해서 별도의 포인트 테이블에 insert를 해야합니다.
 
예를 들면 배치작업시 A고객의 합계포인트가 310점이면 포인트테이블에 100(300합계)포인트 오늘날짜지급으로 한Row를 insert해 주어야하고,
만약 내일 배치할때 A고객의 합계포인트가 750점이면 포인트테이블에 100(500합계)포인트 내일날짜지급으로 한Row, 200(750합계)포인트 내일날짜지급으로 또 한Row를 insert해 주어야하네요.
그럼..내일은 A고객은 총 3개 Row에 데이터가 쌓여있어야 합니다. 100/100/200.
 
특정점수대로 조회하는 쿼리도 헷갈리고  insert하는 로직도 어렵네요. 제가 너무 어렵게 생각하고 있는지..
좋은 오라클 함수가 있으면 좀 알려주세요.
 
어렵네요. 도움좀 주세요..
이 글에 대한 댓글이 총 4건 있습니다.

INSERT INTO EXTRA_POINT (
    NM, DT, ADD_POINT, BASE
)
WITH BASE_POINT AS (
    SELECT 300 BASE,  100 ADD_POINT FROM DUAL
    UNION ALL SELECT 500 BASE,  100 ADD_POINT FROM DUAL
    UNION ALL SELECT 750 BASE,  200 ADD_POINT FROM DUAL
    UNION ALL SELECT 1000 BASE,  300 ADD_POINT FROM DUAL
    UNION ALL SELECT 1000 + ROWNUM*500, 500 FROM DUAL CONNECT BY LEVEL <= 10  -- 적당히
),
TABLE_POINT AS (
    SELECT 'TOM' NM,  600 POINT FROM DUAL
    UNION ALL SELECT 'JOHN' NM,  1300 POINT FROM DUAL
)
SELECT
    A.NM, SYSDATE, T.ADD_POINT, T.BASE
FROM (
    SELECT NM, SUM(POINT) POINT_SUM
    FROM TABLE_POINT
    GROUP BY NM
    HAVING SUM(POINT) >= 300
) A, BASE_POINT T
WHERE T.BASE <= POINT_SUM
AND NOT EXISTS (
        SELECT 'X' FROM EXTRA_POINT E
        WHERE E.NM=A.NM
        AND E.BASE = T.BASE
    )

 

전영식(garam111)님이 2013-01-11 11:24에 작성한 댓글입니다.
이 댓글은 2013-01-11 11:38에 마지막으로 수정되었습니다.

 도와주셔서 감사드려요...이제 좀 앞이 보이네요...

다만,한가지만 더 여쭤볼께요.
 
    SELECT 1500 BASE,  500 ADD_POINT FROM DUAL
    UNION ALL SELECT 1000 BASE,  300 ADD_POINT FROM DUAL
    UNION ALL SELECT 750 BASE,  200 ADD_POINT FROM DUAL
    UNION ALL SELECT 500 BASE,  100 ADD_POINT FROM DUAL
    UNION ALL SELECT 300 BASE,  100 ADD_POINT FROM DUAL
 
위 방법으로 기준포인트 테이블 생성할때,,,
 
1500포인트 이상은 500단위로(1500,2000,2500,3000,3500......loop) 500포인트씩
 
포인트를 더 줘야하는데요..기준포인트 테이블을 1500포인트 이상일때를
 
가정해서 계속 생성해줄수있는 방법은 무엇인지요??
    
my(1111)님이 2013-01-11 11:44에 작성한 댓글입니다.

나중에 수정을 하긴 했는데 못보셨나보네요..

UNION ALL SELECT 1000 + ROWNUM*500 BASE, 500 ADD_POINT FROM DUAL

CONNECT BY LEVEL <= 10 -- 적당히

전영식(garam111)님이 2013-01-11 12:07에 작성한 댓글입니다.

헤매고 있었는데...

감사드립니다. 

많은 도움 주셔서 감사드려요

my(1111)님이 2013-01-11 13:13에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39971datafile은 경로구분없이 데이터가 쌓이나요? [5]
임서희
2013-01-16
5133
39970동일문자가 연속으로 있는 경우를 표기할 수 있을런지요? [2]
초보
2013-01-16
6110
39969오라클 클라이언트가 주기적으로 끊키는 현상 [1]
문의
2013-01-15
5076
39968특정 합계점수로 포인트주는 쿼리 관련 문의 드립니다. [4]
my
2013-01-11
6779
39967네트워크 연결없이 OracleDB 어떻게 쓰나요?
이영주
2013-01-10
5464
39966간단할것같은데 생각이안나는 order by 처리방안? [3]
앙마승재
2013-01-09
5737
39965오라클 9i -> 11g 마이그레이션 후
김창현
2013-01-08
7826
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.022초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다