我想问一下如何从选择结果中删除相同的值(下面的屏幕截图),但是在这种情况下使用+和-符号是不同的符号。我正在使用SQL Server。
我的解决方案:我使用cte
(否,值,值2)创建了一个具有唯一标识符的concat
(或另一个选择),它将仅返回符号相同的行(+和-),然后最终选择不包含cte值的
select*
from myTable
except values from mycte
我的问题是对于类似情况是否有更快,更好,更聪明的解决方案?
答案 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;