2012-02-26 19 views
-1

"CID"(customer_Idフィールド)というフィールドに基づいてテーブルから重複を削除しようとしていますが、削除する行の値を保持して新しいものとして追加する必要があります残りのユニークな行/エントリのフィールド。削除された重複データの一部を保持する

EG:

CID色
A12ブルー
A12グリーン
A13レッド

次のようになります。

CID色NewColor2
A12ブルーグリーン
A13レッド

+0

クイックヒント:例のスペースを節約するために、テキストを選択し、ツールバーの{{}(コードサンプル)のようなボタンをクリックします。 –

+1

テーブルに 'NewColor2'カラムがありますか?同じ 'CID'を持つ3行がある場合はどうなりますか? 「グリーン」行を削除するか、「ブルー」行を削除するかは、どのように分かりますか?あるいは、 'CID'がA12、' Color'がGreen、そして 'NewColor2'がBlueです。 –

+0

NewColor2フィールドはまだテーブルには存在しません。これはクエリ中に作成する必要があります。 NewColor2に表示されている限り、 "Blue"または "Green"のいずれかを複製として削除することは許容されます。同じCIDと同じ色の複数の行はありません.CIDの重複がある場合、色は異なります。 – jensqox

答えて

0

次のクエリは、あなたの明確な色の最大数を与えるので、あなたが必要なフィールドを作成することができます:レコードを区別するためにはるかに容易になるので、私は、テーブルに_rankフィールドを追加します

select max(count(distinct color)) 
    from MY_TABLE 
group by CID; 

その後、
alter table MY_TABLE add (_rank number(10)); 

update MY_TABLE set _rank = rank() over (partition over CID order by color); 

alter table MY_TABLE add constraint ukx unique (CID, _rank); 

各フィールドカラー2、カラー3、color4 ....

update MY_TABLE x 
    set x.color2 = 
     (select y.color 
      from MY_TABLE y 
     where x.CID = y.CID 
      and y._rank = 2) 
where x._rank = 1; 

と最後でのクエリを実行し、以下:

delete from MY_TABLE where _rank != 1; 

alter table MY_TABLE drop (_rank);  
関連する問題