2016-03-15 44 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)