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 41536 게시물 읽기
No. 41536
마농님 도와주세요.
작성자
라일락
작성일
2018-03-19 22:03ⓒ
2018-03-19 22:32ⓜ
조회수
6,019

안녕하세요. 시간에 쫓기다 보니 어떻게 해야 할지 생각도 안나네요..ㅠㅠ

다른 부분을 해결을 어느정도 했는데...이부분을 할 수가 없네요.

 

 

with TEST AS (

SELECT 'A1000901' AS CNO,'20170925' AS NTC_DT, '101' AS SEQ, '0' AS PRCPL_AMT, '130' AS INT_AMT, '201704' AS TARGET_YM, '300' AS NTC_TYPE_CD FROM DUAL

UNION ALL

SELECT 'A1000901' AS CNO,'20170925' AS NTC_DT, '102' AS SEQ, '0' AS PRCPL_AMT, '110' AS INT_AMT, '201705' AS TARGET_YM, '300' AS NTC_TYPE_CD FROM DUAL

UNION ALL

SELECT 'A1000901' AS CNO,'20170925' AS NTC_DT, '103' AS SEQ, '0' AS PRCPL_AMT, '300' AS INT_AMT, '201708' AS TARGET_YM, '300' AS NTC_TYPE_CD FROM DUAL

UNION ALL

SELECT 'A1000901' AS CNO,'20170925' AS NTC_DT, '104' AS SEQ, '109200' AS PRCPL_AMT, '109200' AS INT_AMT, '201709' AS TARGET_YM, '100' AS NTC_TYPE_CD FROM DUAL

)

SELECT CNO, NTC_DT, SEQ, PRCPL_AMT, INT_AMT, TARGET_YM, NTC_TYPE_CD

FROM TEST;

 

==> 결과를 내고 싶은 결과는 /.. 2개 테이블(HAPSAN_T, HAPSAN_DETAIL) 에 SELECT를 해서 INSERT를 할 것인데요..

== MAX(TARGET_YM)

== 최종월고지에 INT_AMT 140원이하 2건을 합산하여

 

[HAPSAN_T]

CNO NTC_DT SEQ_NO PRCPL_AMT INT_AMT CMT TARGET_YM

A1000901 20170925 103 0 300 일반 201708

A1000901 20170925 104 109200 109440 합산2건 201709

 

 

[HAPSAN_DETAIL]

CNO NTC_DT SEQ_NO PRCPL_AMT INT_AMT TARGET_YM NTC_TYPE_CD

A1000901 20170925 101 0 130 201704 300

A1000901 20170925 102 0 110 201705 300

A1000901 20170925 104 109200 109200 201709 100

 

도와주세요.. 쿼리는 어떻게 하면 진심 실력이 늘까요?

 

 

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

INSERT ALL
WHEN cmt != '합산' THEN
  INTO hapsan_t
  VALUES (cno, ntc_dt, seq, prcpl_amt, int_amt_1, cmt, target_ym)
WHEN cmt LIKE '합산%' THEN
  INTO hapsan_detail
  VALUES (cno, ntc_dt, seq, prcpl_amt, int_amt, target_ym, ntc_type_cd)
SELECT cno, ntc_dt, seq, prcpl_amt, int_amt, target_ym, ntc_type_cd
     , CASE WHEN target_ym = max_target_ym AND cnt > 0 THEN '합산'||cnt||'건'
            WHEN int_amt <= 140 THEN '합산'
            ELSE '일반'
             END cmt
     , CASE WHEN target_ym = max_target_ym AND cnt > 0
            THEN int_amt + amt
            ELSE int_amt
             END int_amt_1
  FROM (SELECT cno, ntc_dt, seq, prcpl_amt, int_amt, target_ym, ntc_type_cd
             , MAX(target_ym) OVER(PARTITION BY cno, ntc_dt) max_target_ym
             , SUM(CASE WHEN int_amt <= 140 THEN int_amt END)
                              OVER(PARTITION BY cno, ntc_dt) amt
             , COUNT(CASE WHEN int_amt <= 140 THEN 1 END)
                              OVER(PARTITION BY cno, ntc_dt) cnt
          FROM test
        )
;

마농(manon94)님이 2018-03-20 11:35에 작성한 댓글입니다.
이 댓글은 2018-03-20 14:06에 마지막으로 수정되었습니다.

 감사합니다 마농님덕분에 해결에 큰 도움이 되었어요^^

진짜 개인과외라도 받고싶네요

라일락님이 2018-03-20 18:46에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
41539쿼리 질문드려요~ 답변부탁드립니다. [1]
잘될거다
2018-03-23
5668
41538컬럼별로 카운트 하는방법 알려주세요 [3]
민재영
2018-03-22
5718
41537순번 먹이기(제발 도와주세요.ㅠㅠㅠㅠ) [2]
일쌍다반사
2018-03-21
5776
41536마농님 도와주세요. [2]
라일락
2018-03-19
6019
41535빈 row 추가 방법 문의 [1]
서준용
2018-03-19
5772
41534DB OPEN 시도시 ERROR 문제 질문드려요. [1]
왕왕초보
2018-03-15
5833
41533[강남] oracle 과외 해주실분 찾습니다.
박진철
2018-03-13
5884
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다