【发布时间】:2016-09-13 11:06:03
【问题描述】:
我需要从交易表中选择记录,不包括某些交易。
下面是我的表格的示例输出。
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 并且有两个帐户。我希望我的选择查询排除金额为 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)
如何达到预期的效果?
【问题讨论】:
-
如果在您的示例中交易编号为 TX1、TX1、TX2、TX2,那就很简单了。否则我们怎么知道前两行属于同一个事务,接下来的两行属于第二个事务?使用
txamt连接行似乎很可疑。 -
有没有办法将给定的 CR trx 与其对应的 DR trx 关联起来?
-
@Ponder Stibbons:TXNNO 不是重复的,它有一个唯一的编号,这也是我纠结的地方
-
@Ricardo Arnold:我发现唯一可能的方法是通过金额,否则无法直接关联 DR 和 CR
标签: oracle