【问题标题】:Duplicates in Oracle SQLOracle SQL 中的重复项
【发布时间】: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())来执行此操作。

标签: sql oracle


【解决方案1】:

使用CASE WHEN row_number() OVER ( PARTITION BY award_id ORDER BY instalment_id ) = 1 THEN award_id ELSE null END award_id.. 以及其他列的类似变体。

我没有您的数据模型,但这里有一个使用 DBA_OBJECTS 的概念的工作示例。

select CASE WHEN row_number() OVER ( PARTITION BY owner, object_type ORDER BY object_name, last_ddl_time) = 1 THEN owner ELSE NULL END owner, 
       CASE WHEN row_number() OVER ( PARTITION BY owner, object_type ORDER BY object_name, last_ddl_time) = 1 THEN object_type ELSE NULL END object_type,
       object_name, 
       last_ddl_time
from dba_objects o
order by o.owner, o.object_type, o.object_name, o.last_ddl_time;
+-------+-------------+--------------------------+---------------+
| OWNER | OBJECT_TYPE |       OBJECT_NAME        | LAST_DDL_TIME |
+-------+-------------+--------------------------+---------------+
| ABM   | INDEX       | ABM_CURRS_PK             | 12-DEC-21     |
|       |             | ABM_MDLS_PK              | 12-DEC-21     |
|       |             | ABM_MLS_ACTS_N1          | 12-DEC-21     |
|       |             | ABM_MLS_DS_PK            | 12-DEC-21     |
|       |             | ABM_MLS_PK               | 12-DEC-21     |
|       |             | ABM_MLS_RESOURCES_PK     | 12-DEC-21     |
|       |             | ABM_MLS_RES_PK           | 12-DEC-21     |
|       |             | ABM_MLS_RE_DS_PK         | 12-DEC-21     |
|       |             | ABM_RES_PK               | 12-DEC-21     |
|       |             | ABM_TAGS_PK              | 12-DEC-21     |
|       |             | ABM_TAG_SETS_PK          | 12-DEC-21     |
| ABM   | TABLE       | ABM_CURRS                | 12-DEC-21     |
|       |             | ABM_MDLS                 | 12-DEC-21     |
|       |             | ABM_MLS                  | 12-DEC-21     |
|       |             | ABM_MLS_ACTS             | 12-DEC-21     |
|       |             | ABM_MLS_DS               | 12-DEC-21     |
|       |             | ABM_MLS_RES              | 12-DEC-21     |
|       |             | ABM_MLS_RESOURCES        | 12-DEC-21     |
|       |             | ABM_MLS_RE_DS            | 12-DEC-21     |
|       |             | ABM_RES                  | 12-DEC-21     |
|       |             | ABM_TAGS                 | 12-DEC-21     |
|       |             | ABM_TAG_SETS             | 12-DEC-21     |
| ADDS  | INDEX       | SAS_ARIA_FEED_AUDIT_N1   | 12-DEC-21     |
|       |             | SAS_ARIA_FEED_AUDIT_U1   | 12-DEC-21     |
|       |             | SAS_ARIA_FEED_STAGING_N1 | 12-DEC-21     |
+-------+-------------+--------------------------+---------------+

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-08
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-10
    • 2021-02-12
    • 1970-01-01
    相关资源
    最近更新 更多