запрос на обновление строки - PullRequest
0 голосов
/ 28 июня 2011

У меня есть таблица со структурой:

Country |  DUPLICATE
India   |
Australia|
India   |
USA     |
Germany |
Germany |

Мне нужно обновить столбец DUPLICATE на «Y», если значение в столбце «Страна» уникально, и на «N», если значение не уникально.Я попытался сделать это с помощью

select Country,dupe_count
count(*) over (partition by Country) as dupe_count
from newTable 

. Этот запрос вернет название страны и столбец DUP (содержащий номер появления соответствующего поля страны).Но не смог этого сделать.Любая идея, как это сделать, или есть лучший способ сделать это.Пожалуйста, помогите.

Ответы [ 3 ]

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

Со следующими данными испытаний ...

create table tq84_country (
  country varchar2(10) , 
  duplicate char(1)  check(duplicate in ('Y', 'N'))
);

insert into tq84_country (country) values ('India');
insert into tq84_country (country) values ('Australia');
insert into tq84_country (country) values ('India');
insert into tq84_country (country) values ('USA');
insert into tq84_country (country) values ('Germany');
insert into tq84_country (country) values ('Germany');

... этот оператор обновления должен делать:

update
  tq84_country a
set
  duplicate = (
    select 
      case when 
        count(*)  > 1 then 'Y' 
                      else 'N'
        end 
    from
      tq84_country b
    where
      a.country = b.country
);

Проверка:

select * from tq84_country;
0 голосов
/ 28 июня 2011

в дублирующемся столбце, вы хотите поставить 'N', когда значение не уникально .. означает значение столбца Страна, имеющего дублирующуюся запись, тогда вы хотите поставить N (Нет)

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

update newTable  
set DUPLICATE =
case
when country in (select country from newTable group by country having count(*) > 1) then 
'N' -- if you got my previous point then you have to edit this line with 'Y'
else
'Y'
end;
0 голосов
/ 28 июня 2011

Не слишком уверенно с оракулом - я давно его не использовал. Но по памяти это не отличалось от mssql.

UPDATE newTable 
SET DUPLICATE = 'Y'
WHERE Country IN (
   SELECT COUNT(Country)
   FROM newTable
   GROUP BY Country
   HAVING Count(Country) > 1
)


UPDATE newTable 
SET DUPLICATE = 'N'
WHERE Country IN (
   SELECT COUNT(Country)
   FROM newTable
   GROUP BY Country
   HAVING Count(Country) = 1
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...