Oracle 不包括借记交易

Oracle 不包括借记交易,oracle,Oracle,我需要从交易表中选择记录,不包括某些交易 下面是我的表的一个示例输出 TB_ACCOUNTS CUSTCD ACCTNO PRDCD 100 10001 SATF 100 10002 SATF 200 10003 CUS TB_TRANSACTIONS TXNNO TXDATE ACCTNO CUSTOMER_NO TXAMT CASHFLOWTYPE TX1 18-Jul-16 10001 100

我需要从交易表中选择记录,不包括某些交易

下面是我的表的一个示例输出

TB_ACCOUNTS     
CUSTCD  ACCTNO  PRDCD
100     10001   SATF
100     10002   SATF
200     10003   CUS

TB_TRANSACTIONS    
TXNNO   TXDATE      ACCTNO  CUSTOMER_NO TXAMT   CASHFLOWTYPE
TX1     18-Jul-16   10001   100         5000    CR
TX2     18-Jul-16   10002   100         5000    DR
TX3     18-Jul-16   10003   200         3000    DR
TX4     18-Jul-16   10001   100         3000    CR
我想选择PRDCD为“SATF”的信用交易,并排除自己账户之间的转账。例如,客户100 PRDCD是SATF,有两个账户。我希望我的select查询排除金额为5000的贷方交易,因为借方帐户也属于同一客户。但包括3000金额的贷记交易,因为借记账户属于不同的客户且类型不是SATF

到目前为止,我得到了下面的查询,但我得到的输出是完全错误的

select * from TB_TRANSACTIONS AB inner join TB_ACCOUNTS AC
on AB.ACCTNO=AC.ACCTNO
where AB.CASHFLOWTYPE='CR'
and AC.PRDCD='SATF'
and AB.TXNNO=
(select TXNNO from TB_TRANSACTIONS A, TB_ACCOUNTS B
where A.ACCTNO=B.ACCTNO
and A.TXAMT=AB.TXAMT
and A.CASHFLOWTYPE='DR'
and B.PRDCD=AC.PRDCD)

如何达到预期的效果

您可以使用如下内容:

select txnno, txdate, acctno, customer_no, txamt, cashflowtype, prdcd
  from (
    select t.*, a.prdcd,
           count(distinct customer_no) over (partition by txdate, txamt) cnt
      from tb_transactions t join tb_accounts a on t.acctno = a.acctno )
  where cnt = 2 and cashflowtype = 'CR' and prdcd = 'SATF'
这里我假设
txamt
对于每个日期都是唯一的。我强烈怀疑这可能是错误的联想,因此请注意。 但除了这一列之外,没有其他内容告诉我们两行属于同一个操作

在第一个查询中,我在分析版本中使用了
count()。还有其他可能的解决方案,例如
(不存在)

select *
  from tb_transactions t join tb_accounts a on t.acctno = a.acctno 
  where 
    not exists (
      select 1 from tb_transactions tt join tb_accounts ta on tt.acctno = ta.acctno
        where tt.txdate = t.txdate and tt.txamt = t.txamt
          and tt.cashflowtype = 'DR' and tt.customer_no = t.customer_no)
    and cashflowtype = 'CR' and prdcd = 'SATF'

(抱歉出现任何语言错误)

如果在您的示例中事务编号为TX1、TX1、TX2、TX2,那就简单了。否则,我们如何知道前两行属于同一事务,下两行属于第二个事务?使用
txamt
连接行似乎有点可疑。有没有办法将给定的CR-trx与其对应的DR-trx联系起来?@Pound Stibons:TXNNO不是重复的,它有一个唯一的数字,这也是我被困在@Ricardo Arnold的地方:我找到的唯一可能的方法是通过数量,否则,将DR&CR联系起来是不直接的