Как назначить уникальное значение для совпадающих значений в таблице? - PullRequest
0 голосов
/ 24 июня 2011

Описание моего вопроса: Как назначить уникальное значение для совпадающих значений в таблице?

Я отсортировал столбцы с такими же значениями в таблице, как

AMOUNT REF1 REF2 REF3 VALUE_DATE ADDRESS

2000 asdfg hjklq werty 13-JAN-11 A

2500 asdfg hjklq werty 14-JAN-11 B

2500 asdfg hjklq werty 15-JAN-11 C

2500 asdfg hjklq werty 16-JAN-11 D

2000 asdfg hjklq werty 17-JAN-11 E

требуемый выход: мне нужно обновить и присвоить уникальное значение для соответствующих значений, например

AMOUNT REF1 REF2 REF3 VALUE_DATE АДРЕС match_no

2000 asdfg hjklq werty 13-JAN-11 A 1

2500 asdfg hjklq werty 14-JAN-11 B 2

2500 asdfg hjklq werty 15-JAN-11 C 2

2500 asdfg hjklq werty 16-JAN-11 D 2

2000 asdfg hjklq werty 17-JAN-11 E 1

Тот же уникальный номер должен присваиваться сопоставляемому значению и обновлять строку match_no, как показано выше.

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Вы можете использовать аналитические функции, чтобы ранжировать поля, по которым вы хотите найти уникальные значения, а затем обновить таблицу этими значениями.Для такого сценария, когда вы хотите установить строки на основе соответствующего запроса, merge часто более полезен, чем update.

MERGE INTO   your_table
     USING   (SELECT   amount,
                       ref1,
                       ref2,
                       ref3,
                       DENSE_RANK()
                          OVER (ORDER BY amount,
                                         ref1,
                                         ref2,
                                         ref3)
                          AS rnk
                FROM   your_table) yt
        ON   (    your_table.amount = yt.amount
              AND your_table.ref1 = yt.ref1
              AND your_table.ref2 = yt.ref2
              AND your_table.ref3 = yt.ref3)
WHEN MATCHED THEN
   UPDATE SET match_no = rnk;
0 голосов
/ 24 июня 2011
create table temp_lookup as select x.*, rownum as match_no
  from (select amount, ref1, ref2, ref3 from yourtable
          group by amount, ref1, ref2, ref3) x;

update yourtable a set match_no = 
 (select match_no from temp_lookup b
    where a.amount = b.amount
      and a.ref1 = b.ref1
      and a.ref2 = b.ref2
      and a.ref3 = b.ref3)

drop table temp_lookup;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...