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