【问题标题】:Merge partial duplicate rows into one in oracle在oracle中将部分重复的行合并为一个
【发布时间】:2020-04-17 09:47:51
【问题描述】:
Select * from testtable;

当我们只考虑 4 列时,您可以看到有重复的行。 我们是否可以简单地将其设为一行并将两个属性值(移动编号和值(仅限 OM 或 OD))拆分为两个单独的列,以便像下面那样删除重复项?

create table testtable 
(
ACCOUNT_NUM VARCHAR2(30), 
OTC_ID NUMBER(9), 
OTC_SEQ NUMBER(9), 
OTC_MNY NUMBER(9), 
ATTRIBUTE_VALUE VARCHAR2(30)
);

insert into TESTTABLE (ACCOUNT_NUM, OTC_ID, OTC_SEQ, OTC_MNY, ATTRIBUTE_VALUE)
values ('0000000191', 381, 1, 1000, 'OM');

insert into TESTTABLE (ACCOUNT_NUM, OTC_ID, OTC_SEQ, OTC_MNY, ATTRIBUTE_VALUE)
values ('0000000191', 381, 1, 1000, '07400004483');

insert into TESTTABLE (ACCOUNT_NUM, OTC_ID, OTC_SEQ, OTC_MNY, ATTRIBUTE_VALUE)
values ('0000000191', 382, 2, 1000, 'OD');

insert into TESTTABLE (ACCOUNT_NUM, OTC_ID, OTC_SEQ, OTC_MNY, ATTRIBUTE_VALUE)
values ('0000000191', 382, 2, 1000, '07400004483');

insert into TESTTABLE (ACCOUNT_NUM, OTC_ID, OTC_SEQ, OTC_MNY, ATTRIBUTE_VALUE)
values ('0000000191', 397, 3, 3000, 'OD');

insert into TESTTABLE (ACCOUNT_NUM, OTC_ID, OTC_SEQ, OTC_MNY, ATTRIBUTE_VALUE)
values ('0000000191', 397, 3, 3000, '07800000688');

【问题讨论】:

    标签: oracle oracle11g


    【解决方案1】:

    您希望将 OM/OD 值与其他值分开。一种选择是使用条件聚合:

    select 
        account_num, 
        otc_id, 
        otc_seq, 
        otc_mny,
        max(case when attribute_value in ('OM', 'OD') then attribute_value end) 
            as attribute_value_1,
        max(case when attribute_value not in ('OM', 'OD') then attribute_value end) 
            as attribute_value_2
    from testtable
    group by account_num, otc_id, otc_seq, otc_mny
    order by account_num, otc_id, otc_seq, otc_mny
    

    Demo on DB Fiddle

    ACCOUNT_NUM |场外交易ID |场外交易序列 |场外交易_MNY | ATTRIBUTE_VALUE_1 | ATTRIBUTE_VALUE_2 :------------ | -----: | ------: | ------: | :---------------- | :---------------- 0000000191 | 381 | 1 | 1000 |欧姆 | 07400004483 0000000191 | 382 | 2 | 1000 |外径 | 07400004483 0000000191 | 397 | 3 | 3000 |外径 | 07800000688

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-13
      • 1970-01-01
      • 1970-01-01
      • 2012-06-29
      • 2011-12-14
      • 2019-09-25
      • 1970-01-01
      • 2015-05-27
      相关资源
      最近更新 更多