【发布时间】:2022-08-15 23:47:43
【问题描述】:
我有一个查询,我想从中删除/抑制重复值。
我正在使用 3 张桌子
表 1:奖项
| AWARD_ID | IDENTIFIER | AMOUNT |
|---|---|---|
| 1001 | 200112 | 3000 |
| 1002 | 200113 | 4000 |
| 1003 | 200114 | 5000 |
表 2:INSTALMENT_PAYMENT
| INSTALMENT_ID | AWARD_ID | AMOUNT |
|---|---|---|
| 1 | 1001 | 4000 |
| 2 | 1001 | -1000 |
| 3 | 1002 | 4000 |
| 4 | 1003 | 1000 |
| 5 | 1003 | 1000 |
| 6 | 1003 | 3000 |
表 3:侦察
| ID | REFERENCE | AMOUNT |
|---|---|---|
| 1 | 200112 | 3000 |
| 2 | 200113 | 4000 |
| 3 | 200114 | 5000 |
所以如果我加入 TABLES 1 AND 2 对于一个简单的查询
`SELECT A.AWARD_ID, A.IDENTIFIER IP.AMOUNT, FROM AWARD A,INSTALMENT_PAYMENTS IP 其中 A.AWARD_ID=IP.AWARD_ID\'
我得到的回报如下:
| AWARD_ID | IDENTIFIER | INSTALMENT_ID | AMOUNT |
|---|---|---|---|
| 1001 | 200112 | 1 | 4000 |
| 1001 | 200112 | 2 | -1000 |
| 1002 | 200113 | 3 | 4000 |
| 1003 | 200114 | 4 | 1000 |
| 1003 | 200114 | 5 | 1000 |
| 1003 | 200114 | 6 | 3000 |
如果我将表 3 添加到组合中(为了扩充,此数据是从第 3 方提供的用于对账目的,并且不能像表 2 中那样分解为事务级别)
SELECT A.AWARD_ID, A.IDENTIFIER IP.AMOUNT R.AMOUNT AS RECON_AMOUNT, FROM AWARD A, INSTALMENT_PAYMENTS IP, RECON R WHERE A.AWARD_ID=IP.AWARD_ID\' AND A.IDENTIFER= R.REFERENCE
我得到的回报如下:
| AWARD_ID | IDENTIFIER | INSTALMENT_ID | AMOUNT | RECON_AMOUNT |
|---|---|---|---|---|
| 1001 | 200112 | 1 | 4000 | 3000 |
| 1001 | 200112 | 2 | -1000 | 3000 |
| 1002 | 200113 | 3 | 4000 | 4000 |
| 1003 | 200114 | 4 | 1000 | 5000 |
| 1003 | 200114 | 5 | 1000 | 5000 |
| 1003 | 200114 | 6 | 3000 | 5000 |
我要做的是抑制列 AWARD_ID、IDENTIFIER 和 RECON_AMOUNT 中的相同值/重复项 - 如果可能看起来像:
| AWARD_ID | IDENTIFIER | INSTALMENT_ID | AMOUNT | RECON_AMOUNT |
|---|---|---|---|---|
| 1001 | 200112 | 1 | 4000 | 3000 |
| 2 | -1000 | |||
| 1002 | 200113 | 3 | 4000 | 4000 |
| 1003 | 200114 | 4 | 1000 | 5000 |
| 5 | 1000 | |||
| 6 | 3000 |
-
您将需要使用带有一些 CASE 逻辑的分析函数(如 row_number())来执行此操作。