쿼리 질문드립니다. 0 6 1,844

by xcrew [SQL Query] postgresql [2023.10.23 10:35:52]


안녕하세요. 쿼리 질문 드립니다.

결제데이터와 취소데이터를 같이 보여주고 싶습니다.

 

다음은 각 테이블의 select 결과 입니다.
결제테이블(order01m)

SELECT

order_id,

user_id,

moid,

pay_success_ts,

total_price,

pay_std

FROM order01m a

WHERE a.user_id = '2RAG9FQH'

ORDER BY pay_success_ts DESC;

결제ID 사용자ID 주문번호 결제일 결제금액 결제상태
133

2RAG9FQH

202303273K5P6 2023-03-27 12:28:18.643 670250 success
514

2RAG9FQH

20230926H7VW 2023-09-26 10:00:00.004 156750 success
285

2RAG9FQH

20230626YD0J 2023-06-26 10:00:00.011 156750 success
423

2RAG9FQH

20230923TES2 2023-09-23 10:05:00.006 156750 success
350

2RAG9FQH

202307264J09T 2023-07-26 10:00:00.072 156750 success

 

취소테이블(refn01m)

SELECT

refund_id,

order_id,

moid,

user_id,

refn_start_ts,

refn_price,

refn_msg,

state_cd

FROM refn01m a

WHERE a.user_id = '2RAG9FQH'

ORDER BY refn_start_ts DESC;

취소ID 결제ID 주문번호 사용자ID 결제취소일 취소금액 취소메세지 취소구분
190 133 202303273K5P6 2RAG9FQH 2023-10-18 14:14:03.730 200000 반횐금 부분취소
200 514 20230926H7VW 2RAG9FQH

2023-10-18 15:08:02.730

38500 반횐금 부분취소

 

제가 원하는 결과는 7월24일부터~ 10월23일 기간으로 검색시

거래일과 취소일 기준으로 아래와 같은 결과가 나오게 하려고 합니다.

취소데이터의 원거래 거래일을 같이 나오게 하고 싶습니다.

주문번호 거래일 취소일 거래금액 거래상태 사용자ID 결제ID 취소ID
20230926H7VW 2023-09-26 10:00:00.004 2023-10-18 15:08:02.730 38500 부분취소 2RAG9FQH 514 200
20230926H7VW 2023-09-26 10:00:00.004   156750 success 2RAG9FQH 514  
20230923TES2 2023-09-23 10:05:00.006   156750 success 2RAG9FQH 423  
202307264J09T 2023-07-26 10:00:00.072   156750 success 2RAG9FQH 350  
202303273K5P6 2023-03-27 12:28:18.643 2023-10-18 14:14:03.730 670250 부분취소 2RAG9FQH 133 190
               
               

도움부탁드립니다.


 

by 우주민 [2023.10.23 13:43:05]
SELECT
 a.moid AS 주문번호
,a.pay_success_ts AS 거래일
,b.refn_start_ts AS 취소일
,a.total_price AS 결제금액
,b.refn_price AS 취소금액
,CASE WHEN b.state_cd IS NOT NULL THEN b.state_cd ELSE a.pay_std END  AS 거래상태
,a.user_id AS 사용자id
,a.order_id AS 결제id
,b.refund_id AS 취소id
FROM order01m a
LEFT OUTER JOIN refn01m b
ON a.order_id = b.order_id
WHERE a.pay_success_ts BETWEEN 조회시작일 AND 조회종료일

 

급하게 작성한거라 정상적으로 나올지 모르겠네요.

참조 정도만 해주시면 될 듯 합니다.


by xcrew [2023.10.25 09:48:40]

답변 주셔서 감사합니다.


by pajama [2023.10.23 13:59:57]

아래처럼 해봤습니다.

(select a.moid, a.pay_success_ts, null refn_start_ts, a.total_price, a.user_id, a.pay_std, a.order_id, null refund_id from order01m a)
union all
(select a.moid, a.pay_success_ts, b.refn_start_ts, b.refn_price, a.user_id, b.state_cd, a.order_id, b.refund_id 
from order01m a
inner join refn01m b on a.order_id = b.order_id)
order by pay_success_ts desc, refn_start_ts desc nulls last

 


by 우주민 [2023.10.23 16:42:09]

아... 확인해보니 결제와 취소 를 각각 다른 라인으로 표기했네요.

조금 더 주의깊게 파악 했어야 했는데... ㅠㅠ


by pajama [2023.10.23 16:57:04]

저도 처음에 아우터조인으로 했었는데 결과표랑 비교해보고 알게됐습니다 ㅎ 뭔가 또 다른 방법이 있을것 같기도 하고..


by xcrew [2023.10.25 09:48:46]

답변 주셔서 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입