2011-06-28 18 views
0

を更新するには、次の国の列の値が一意である場合クエリはI構造を持つテーブルを持っている行

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

私は「Y」にDUPLICATEcolumnを更新しなければならないとの「N」値が一意でない場合。 私は国の名前とDUP列(該当国フィールドの出現数をconataing)を返します

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

このクエリの助けを借りて、これを達成しようとしました。 しかしそれはできませんでした。 どのようにこれを行うか、またはこれを行うためのよりよい方法があります。 助けてください。

答えて

0

私はそれを使用して以来、長い間、オラクルとあまりにも確かです。しかし、メモリからは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 
) 
1

...

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; 
+1

このタスクを実行するために簡単に次のクエリを使用することができます任意の方法を載せていきたいと思いますもちろん、すべての行を更新することを意図していました。 –

+0

オハイオ州、申し訳ありませんRenéNyffenegger ...これは正式なものです:)前のコメントを申し訳ありません.... テーブルを更新することをお勧めします –

0

あなたは 'N'を入れたいときe値が一意ではありません...重複レコードを持つ列の国の値を意味し、あなたは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; 
関連する問題