Re: Отсеивание записей для которых есть дубликат с минусом
От: Olaf Россия  
Дата: 26.01.22 10:16
Оценка:
Здравствуйте, _agg, Вы писали:

_>Всем привет, я столкнулся с проблемой и пока немогу решить. Есть записи которые дублируются за исключением суммы, встречаются иногда пара записей у которых все поля идентичны кроме того что сумма со знаком минус в одной из записей,

_>к примеру:
_>...

_>Как мне с помощью SQL сделать такую выборку в которой нет записей для которых есть дубликат со знаком минус ?


Вы не сказали какая у вас СУБД. Но идея в реализации может быть следующая...
/* С оконными функциями */
select
    *
from
(
    select
        *
        ,count(*) over(partition by Name, abs(Value)) as Cnt
    from
    (
        values
            ('запись 1', 10),
            ('запись 1', -10),
            ('запись 1', 10),
            ('запись 2', 10),
            ('запись 2', -20),
            ('запись 2', -20),
            ('запись 3', 40),
            ('запись 3', 50)
    ) a (Name, Value)
) b
where
    cnt = 1

/* C join */
;with cte as 
(
    select
        Name, Value
    from
    (
        values
            ('запись 1', 10),
            ('запись 1', -10),
            ('запись 1', 10),
            ('запись 2', 10),
            ('запись 2', -20),
            ('запись 2', -20),
            ('запись 3', 40),
            ('запись 3', 50)
    ) a (Name, Value)
)
select
    c2.Name, c2.Value
from
    cte c1
join
    cte c2
on
    c1.Name = c2.Name and abs(c1.Value) = abs(c2.Value)
group by
    c2.Name, c2.Value
having
    count(*) = 1
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.