Здравствуйте, _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