Обновить столбец на основе дублирования - PullRequest
0 голосов
/ 15 апреля 2020

Мне нужно обновить записи в таблице на основе дублирования.

Вот структура таблицы:

SHIPMENT  VALUE  GROUP_ID
A100       23
A100       25
A200       29

Мне нужно назначить group_id таким образом, чтобы все отправления обновлялись с GROUP_ID 10. Отправка, имеющая более одного экземпляра, второй экземпляр будет обновлен до GROUP_ID 12.

SHIPMENT  VALUE  GROUP_ID
A100       23      10
A100       25      12
A200       29      10

это можно сделать за одно обновление?

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Вот один вариант update; он проверяет, равен ли value минимум value для каждого shipment. Если это так, установите его на 10; в противном случае установите значение 12. Посмотрите, поможет ли это.

SQL> select * from test order by shipment, value;

SHIP      VALUE   GROUP_ID
---- ---------- ----------
A100         23
A100         25
A200         29

SQL> update test t set
  2    t.group_id = (select case when t.value = x.min_value then 10
  3                              else 12
  4                         end
  5                  from (select a.shipment,
  6                               min(a.value) min_value
  7                        from test a
  8                        group by a.shipment
  9                       ) x
 10                  where x.shipment = t.shipment
 11                 );

3 rows updated.

SQL> select * from test order by shipment, value;

SHIP      VALUE   GROUP_ID
---- ---------- ----------
A100         23         10
A100         25         12
A200         29         10

SQL>
0 голосов
/ 15 апреля 2020

Вы, кажется, хотите case и row_number():

select t.*,
       (case when row_number() over (partition by shipment order by value) = 1
             then 10 else 12
        end) as groupid
from t;
...