Я хотел бы спросить, как я могу избавиться от одних и тех же значений в результате выбора (скриншот ниже), но в этом случае разные символы + и - знак. Я использую SQL Server.
Мое решение: я создал cte
(или другой выбор) с уникальным идентификатором, используя concat
(No, Value, value2), который будет возвращать только записи с одинаковыми строками, которые отличаются символом (+ и -), а затем окончательный выбор без значений из cte .
select*
from myTable
except values from mycte
Мой вопрос в том, есть ли более быстрое, лучшее, умное решение для подобной ситуации?
Я думаю, что 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;