记录日志的尝试次数

时间:2018-10-24 08:06:02

标签: sql oracle

我有3张桌子。 INV_HDR,PAYM_LOG,PAY_CA。架构如下

CREATE TABLE INV_HDR 
(
  INV_HDR_ID NUMBER(19, 0) DEFAULT "SEQ_INV_HDR_ID"."NEXTVAL" NOT NULL 
, INV_NO VARCHAR2(30 BYTE) NOT NULL 
, INV_TYPE_CD VARCHAR2(10 BYTE) 
, INV_PARTY_UEN VARCHAR2(17 BYTE) 
, INV_DT DATE 
, GIRO_STS_CD VARCHAR2(11 BYTE) DEFAULT '0' NOT NULL 
, INV_STS_CD VARCHAR2(11 BYTE) DEFAULT '1' NOT NULL 
, PAYMENT_STS_CD VARCHAR2(11 BYTE) DEFAULT '1' NOT NULL 
, RFD_STS_CD VARCHAR2(11 BYTE) DEFAULT '0' NOT NULL 
, WAIVE_WRITE_DRAW_STS_CD VARCHAR2(11 BYTE) DEFAULT '0' NOT NULL 
) ; 

CREATE TABLE PAYM_LOG 
(
  PAYMENT_LOG_ID NUMBER(19, 0) DEFAULT "SEQ_PAYMENT_LOG_ID"."NEXTVAL" NOT NULL 
, INV_HDR_ID NUMBER(19, 0) NOT NULL 
, INV_PARTY_UEN VARCHAR2(17 BYTE) 
, INV_NO VARCHAR2(30 BYTE) NOT NULL 
, TRANS_DT DATE 
, AMT NUMBER(15, 2) DEFAULT 0 NOT NULL 
, VOUCHER_NO VARCHAR2(30 BYTE) 
, REASON VARCHAR2(60 BYTE) 
, CREATED_BY VARCHAR2(35 BYTE) NOT NULL 
, CREATED_DT TIMESTAMP(6) DEFAULT SYSTIMESTAMP NOT NULL 
, LAST_UPDATED_BY VARCHAR2(35 BYTE) NOT NULL 
, LAST_UPDATED_DT TIMESTAMP(6) DEFAULT SYSTIMESTAMP NOT NULL 
, PAYMENT_STS VARCHAR2(11 BYTE) 
) ;

CREATE TABLE PAY_CA 
(
  PAY_CA_ID NUMBER(19, 0) DEFAULT "SEQ_PAY_CA_ID"."NEXTVAL" NOT NULL 
, CA_ID VARCHAR2(2 BYTE) 
, TRANS_DT DATE 
, JOURNAL_HDR_ID NUMBER(19, 0) 
, CREATED_BY VARCHAR2(35 BYTE) NOT NULL 
, CREATED_DT TIMESTAMP(6) DEFAULT SYSTIMESTAMP NOT NULL 
, LAST_UPDATED_BY VARCHAR2(35 BYTE) NOT NULL 
) 

INV_HDR
1.为生成的每个发票创建发票。 PK = INV_HDR_ID
2.付款成功后,GIRO_STS_CD将从2(成功)更新为3(失败)

PAYM_LOG
1.记录每次尝试付款的情况。
2. PAYMENT_STS = 12(失败),13(通过)

PAY_CA
1.只有成功付款后,才会创建记录。

我想生成一个状态为4的报告。
1. GIRO成功-第一次成功付款
2. GIRO失败
3. GIRO失败-第一次重试
4. GIRO失败-第二次重试

我的报告列将为
S/N | INV_HDR.UNV_PARTY_UEN | CA_ID | Payment Status | Amount | Retry

带有摘要以统计4种不同的状态。

Summary                     Count          Amount  
GIRO Successful             x              100
GIRO Failed                 y              200
GIRO Failed - 1st Retry     z              50
GIRO Failed - 2nd Retry     w              10

是否可以在单个SQL中完成?到目前为止,我有类似的东西。

SELECT PAY_CA.CA_ID, INV_HDR.INV_PARTY_UEN ,
  INV_HDR.GIRO_STS_CD AS PAYMENT_STATUS,
  PAY_CA.AMT,
  SUM (
  CASE
    WHEN PAYM_LOG.PAYMENT_STS = '12'
    THEN 1
    ELSE 0
  END ) AS RETRY
FROM INV_HDR,
  PAYM_LOG,
  PAY_CA
WHERE INV_HDR.INV_HDR_ID = CA_PAY.INV_HDR_ID
AND INV_HDR.INV_NO       = PAYM_LOG.INV_NO
AND INV_HDR.GIRO_STS_CD IN ('2' ,'3')
GROUP BY PAY_CA.CA_ID ,
  INV_HDR.INV_PARTY_UEN ,
  INV_HDR.GIRO_STS_CD ,
  PAY_CA.AMT

我需要同时获取失败和成功的付款。加入PAY_CA只允许我成功付款。我还如何将不成功的付款计入重试次数?

0 个答案:

没有答案