2012-02-26 49 views
-1

我正在尋找基於名爲「CID」(customer_Id字段)的字段從表中刪除重複項,但我需要保留一行中的值以刪除並將其添加爲新字段中剩餘的唯一行/條目。保留被刪除重複數據的一部分

EG:

CID顏色
A12藍
A12綠色
A13紅

應該是這樣的:

CID顏色NewColor2
A12藍綠色
A13紅

+0

快速提示:爲了在示例中保留空格,您可以選擇文本並單擊工具欄中類似於「{}'(代碼示例)」的按鈕。 – 2012-02-26 01:43:42

+1

表中是否存在「NewColor2」列?如果有3行具有相同的'CID'會怎麼樣?你如何知道是刪除「綠色」行還是刪除「藍色」行?或者,A12的「CID」,綠色的「顏色」和藍色的「NewColor2」是否同樣可以接受? – 2012-02-26 01:49:50

+0

否表中的NewColor2字段不存在 - 在查詢過程中必須創建該字段。只要它出現在NewColor2中,將「藍色」或「綠色」作爲副本去除是可以接受的。不會有多行具有相同的CID和相同的顏色......如果存在CID的重複,那麼顏色將會不同。 – jensqox 2012-02-27 22:26:11

回答

0

下面的查詢,將給您的不同顏色的最大數量,這樣你就可以創建所需的字段:

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

我想補充一個_Rank田頭到餐桌,所以這將是很容易分辨的記錄:

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); 

然後執行以下查詢每個字段COLOR2,COLOR3,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);  
相關問題