Подсчет попыток за бревно - PullRequest
       0

Подсчет попыток за бревно

0 голосов
/ 24 октября 2018

у меня 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 (Fail), 13 (Pass)

PAY_CA
1. Записи будут созданы только для успешного платежа.

Дело в том, что я хотел бы создатьотчет, в котором имеется 4 состояния.
1. GIRO Successful - первый раз успешный платеж
2. GIRO Failed
3. GIRO Failed - 1-я повторная попытка
4. GIRO Failed - вторая попытка

Мои столбцы отчета будут
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 позволит мне получать успешные платежи.Как также получить неуспешные платежи при подсчете повторных попыток?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...