2016-03-15 42 views
0

我真的不知道該如何字這個問題顯然所以也許我會用一個例子:SQL - 基於某些列,而不是其他刪除重複

Column1 Column2 Column3 
A   100  239.1 
A   100  0 
A   101  191.3 
B   99  0 
B   99  12.43 

我希望能夠看到這有僅與列1列2和重複,然後比較基礎上,他們在欄3的值分別爲這些重複,並刪除其中有一個0

所以我得到的表看起來像一個:

Column1 Column2 Column3 
    A   100  239.1 
    A   101  191.3 
    B   99  12.43 

我不完全確定如何做到這一點,任何幫助將不勝感激。

+0

你把例子,但沒有解釋邏輯例如column2也可以是0? –

+1

你正在使用什麼數據庫?請適當標記。 –

+0

這可能是一個很好的擴展你的例子。就像這樣,只要刪除'Column3'爲'0'的所有行,就可以得到相同的結果。 –

回答

0

你需要加入表本身,類似的信息(如表被稱爲「數字」爲EG)

select yourcols 
    from figures a, figures b 
    where a.col1 = b.col1 
    and a.col2 = b.col2 
    and (a.col3 = '0' or b.col3 = '0') 

和變化,要刪除,當你很高興找到你的行刪除...

0

根據您的數據,您可以簡單地DELETE FROM tab WHERE column3 = 0,但這可能太簡化了。

此檢查0和附加行<> 0column3

select * 
from tab as t1 
where column3 = 0 
and exists 
( 
    select * 
    from tab as t2 
    where t1.column1 = t2.column1 
    and t1.column2 = t2.column2 
    and t2.column3 <> 0 
) 

只要切換到DELETE如果返回正確的行...

1

你可能會尋找一個GROUP BY子句

Select column1, column2, SUM(column3) as col3 GROUP BY column2; 
0

對於視圖行應該工作

選擇col1,col2,col3 FROM yourtable t WHERE col3> 0 OR(col1,col2)NOT IN(SELECT col1,col2 FROM yourtable t2 WHERE col3> 0 AND t.col1 = t2.col1 and t.col2 = t2.col2)

如果你想刪除這些行嘗試

從yourtable TDELETE鍵WHERE COL3 = 0 AND(COL1,COL2)= ANY(SELECT COL1,COL2 FROM yourtable T2 WHERE COL3> 0和t.col1 = t2.col1和t.col2 = t2.col2)