Oracle обновляет идентификационные строки в таблице

У меня есть таблица, называемая пользователями со следующими столбцами:

Name, Location, Active (all varchars).
John Berlin OK
Danny London OK
Robert NY OK
John Berlin OK
Danny Berlin OK

Я хотел бы обновить столбец Active до NOK для пользователей, которые появляются более одного раза (два, три или х раз), и они имеют одинаковое имя и местоположение (одинаковые строки в таблице). Например:

John Berlin NOK
 Danny London OK
 Robert NY OK
 John Berlin NOK
 Danny Berlin OK

Как я могу это сделать? Спасибо!

2 ответа

В Oracle вы можете использовать:

UPDATE your_table
 SET active = 'NOK'
 WHERE (name, location) IN (SELECT name, location 
 FROM your_table 
 GROUP BY name, location 
 HAVING COUNT(*) > 1)


Вам нужно будет сделать это следующим образом:

Вставьте повторяющиеся значения в таблицу #temp

select t.Name, t.Location
into #test
from tablename t
group by t.Name, t.Location
having count(t.Name) > 1

Сделайте обновление

update tablename
set Active = 'NOK'
from tablename t
inner join #test t2 on t.Name = t2.Name and t.Location = t2.Location

Или в один шаг:

update tablename
set Active = 'NOK'
from tablename t
inner join (select t.Name, t.Location
 from tablename t
 group by t.Name, t.Location
 having count(t.Name) > 1) t2 on t.Name = t2.Name and t.Location = t2.Location

licensed under cc by-sa 3.0 with attribution.