안녕하세요.
다들 설은 잘 보내셨는지...
쿼리를 짜볼려고 끙끙 해봐도 잘 안되네요..
cube로 해야 할 것 같은데..
ACCOUNTNO\bank\ RAISE_TIME\ MSG_TYPE\ RECV_AMT\ RECV_DATE\ NAB_AMT\ NAB_DATE
62691169684237\ 081\ 20100216140510\ 수취조회\ 2490000\ 20100213\ 2490000 \ 20100202
62691169684237\ 081\ 20100216130410\ 수취조회\ 2490000\ 20100213\ 300000 \ 20100228
62691169684237\ 081\ 20100216130410\ 수취조회\ 2490000\ 20100213\ 20000000\ 20100201
62691169684237\ 081\ 20100216130410\ 수취조회\ 2490000\ 20100213\ 300000 \ 20100228
62691169684237\ 081\ 20100216120410\ 수취조회\ 2490000\ 20100213\ 600000 \ 20100228
62691169684237\ 081\ 20100216120410\ 수취조회\ 2490000\ 20100213\ 2000000 \ 20100228
위처럼 자료가 테이블에 들어있다고 했을 때
제가 구하고 싶은 것은
쿼리문을 날려서
ACCOUNTNO\bank\ RAISE_TIME\ MSG_TYPE\ RECV_AMT\ RECV_DATE\ NAB_AMT\ NAB_DATE
62691169684237\ 081\ 20100216140510\ 수취조회\ 2490000\ 20100213\ 2490000 \ 20100202
에러원인
62691169684237\ 081\ 20100216130410\ 수취조회\ 2490000\ 20100213\ 300000 \ 20100228
62691169684237\ 081\ 20100216130410\ 수취조회\ 2490000\ 20100213\ 20000000\ 20100201
62691169684237\ 081\ 20100216130410\ 수취조회\ 2490000\ 20100213\ 300000 \ 20100228
에러원인
62691169684237\ 081\ 20100216120410\ 수취조회\ 2490000\ 20100213\ 600000 \ 20100228
62691169684237\ 081\ 20100216120410\ 수취조회\ 2490000\ 20100213\ 2000000 \ 20100228
에러원인
즉, raise_time을 그룹바이로 해서 리스트를 다 보여주면서 raise_time 단위로
에러 원인을 출력하고 싶은 것입니다.
제가 짜본 쿼리는 이렇습니다.
SELECT MAX(VAS_ACCOUNTNO) VAS_ACCOUNTNO
,DECODE(SUBSTR(MAX(BANK_CODE), 1, 3), '000', '081', '001', '001', '002', '002', '003', '003',
'004', '004', '005', '005', '006', '004', '007', '007', '008', '008', '009', '004', '010', '011',
'011', '011', '012', '012', '013', '012', '014', '012', '015', '012', '016', '011', '017', '011',
'019', '004', '020', '020', '021', '026', '022', '020', '023', '023', '024', '020', '025', '081',
'026', '026', '027', '053', '028', '026', '029', '004', '030', '004', '031', '031', '032', '032',
'033', '081', '034', '034', '035', '035', '036', '053', '037', '037', '038', '026', '039', '039',
'040', '026', '045', '045', '046', '045', '048', '048', '049', '048', '050', '050', '053', '053',
'071', '071', '072', '071', '073', '071', '074', '071', '075', '071', '081', '081', '082', '081',
'083', '020', '084', '020', '085', '045', '086', '045', '088', '026',
'081') SUNAPGIGWAN
,MAX(RAISE_TIME) RAISE_TIME
,CASE WHEN MAX(MSG_TYPE) IN ('02001000', '02004100') THEN '수취조회'
WHEN MAX(MSG_TYPE) IN ('02001100', '02005100') THEN '계좌입금'
ELSE MAX(MSG_TYPE)
END MSG_TYPE
,MAX(RECV_AMT) RECV_AMT
,MAX(RECV_DATE) RECV_DATE
,MAX(BANK_CODE) BANK_CODE
,NAB_AMT
,MIN(NAB_DATE) NAB_DATE
,SUM(NAB_AMT) TOT_AMT
,CASE WHEN SUM(NAB_AMT) <> TO_CHAR(MAX(RECV_AMT)) THEN 'ERR_AMT'
ELSE TO_CHAR(MAX(RECV_AMT))
END COMPARE_AMT
,CASE WHEN MIN(NAB_DATE) <> '00000000'
AND MIN(NAB_DATE) < MAX(RECV_DATE) THEN 'ERR_DATE'
ELSE MAX(RECV_DATE)
END COMPARE_DATE
FROM RECP_ERR_TAB
WHERE TAX_DIV = '01'
AND RECV_DATE BETWEEN '20100213' AND '20100217'
AND VAS_ACCOUNTNO = '62691169684237'
GROUP BY CUBE(NAB_AMT), RAISE_TIME
ORDER BY RAISE_TIME, NAB_AMT
이렇게 했는데 금액이 같은 건 하나로 합쳐져서 중복된 300000원 건이 출력이 안되더군요.
jsp에서는 위의 에러원인에서
nab_amt가 널이면 리스트에 에러원인을 출력해서
compare_date 값이 err_date 이거나 compare_amt값이 err_amt 이면 에러문구를
뿌리는 식으로 처리할려고 하는데요.
참고로 저 테이블엔 은행과의 통신 전문 중에서 오류건만 인서트 되고 있으며
nap_amt나 nap_date는 같은 값이 들어가는 경우가 있습니다.
그래서 그룹바이를 raise_time말고도 어느 하나 맞추기에도 참 애매하네요.
고수님들이 해결방안을 제시해주시면 감사하겠습니다.
편안한 저녁 되십시오.