SQL Server:如何从选择结果中删除相同/相反的值(+和-符号)

时间:2019-04-10 11:29:35

标签: sql sql-server

我想问一下如何从选择结果中删除相同的值(下面的屏幕截图),但是在这种情况下使用+和-符号是不同的符号。我正在使用SQL Server。

我的解决方案:我使用cte(否,值,值2)创建了一个具有唯一标识符的concat(或另一个选择),它将仅返回符号相同的行(+和-),然后最终选择不包含cte值的

select* 
from myTable 
except values from mycte

Select result

我的问题是对于类似情况是否有更快,更好,更聪明的解决方案?

1 个答案:

答案 0 :(得分:2)

我认为not exists是您想要的。假设symbol仅采用值'+''-'

select t.*
from myTable t
where not exists (select 1
                  from myTable t2
                  where t2.no = t.no and t2.date = t.date and
                        t2.value = t.value and
                        t2.value2 = t.value2 and
                        t2.provision = t.provision and
                        t2.symbol <> t.symbol
                 );

如果symbol可以采用其他值,则添加条件t2.symbol in ('+', '-') and t.symbol in ('+', '-')

您也可以使用窗口功能来解决这个问题。假设符号为+-,并且最多有两行重复:

select t.*
from (select t.*,
             min(symbol) over (partition by no, date, value, value2, provision) as min_symbol,
             min(symbol) over (partition by no, date, value, value2, provision) as max_symbol
      from mytable t
     ) t
where min_symbol <> max_symbol;