SQL Server: как избавиться от одинаковых / противоположных значений (+ и - знак) из результата выбора - PullRequest
2 голосов
/ 10 апреля 2019

Я хотел бы спросить, как я могу избавиться от тех же значений в результате выбора (скриншот ниже), но с другим символом в этом случае знаком + и -. Я использую SQL Server.

Мое решение: я создал cte (или другой выбор) с уникальным идентификатором, используя concat (Нет, Значение, значение2), который будет возвращать только записи с одинаковыми строками, которые отличаются символом (+ и -), затем окончательный выбор без значений из cte.

select* 
from myTable 
except values from mycte

Select result

Мой вопрос: есть ли более быстрое, лучшее, умное решение для подобной ситуации?

1 Ответ

2 голосов
/ 10 апреля 2019

Я думаю 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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...