SQL Поиск строк с отличиями между дублями по одному условию

Ребята, подскажите как составить запрос, уже всю голову словала=( Есть таблица table_A на 100 тысяч записей

Столбцы:

table_A.numOrder
table_A.count

В table_A.numOrder находятся дублированные номера заказов(всего 100 тысяч записей и из них только 50 тысяч уникальные)

Может быть ситуация 1:

table_A.numOrder = TDR140142
table_A.numOrder = TDR140142
table_A.count = 2500
table_A.count = 2500

и ситуация 2:

table_A.numOrder = TDR140138
table_A.numOrder = TDR140138
table_A.count = 642541
table_A.count = 239754,1

как из таблицы выцепить записи в которых возникла ситуация 2 (в двух дублях table_A.numOrder разные суммы table_A.count)?


Ответы (1 шт):

Автор решения: Антон

Если mssql можно попробовать так:

/*Создаю временную таблицу для проверки*/
Declare @table_A table (numOrder varchar(max),[count] numeric(12,2))
insert into @table_A 
values ('TDR140142',2500),('TDR140142',2500),('TDR140138',642541),('TDR140138',239754.1)
        ,('TDR140141',2501),('TDR140141',2501),('TDR140138',56.12),('TDR140139',41.1)
        ,('TDR140139',25),('TDR140139',500),('TDR140139',64.00),('TDR140139',20.1)

/*Присваиваем уникальный ID каждой строчке*/
;with cte as (
select ROW_NUMBER () over  (order by numOrder ) as id,*
from @table_A)
/*Далее уже связываем получившуюся таблицу с собой же по numOrder,
 но так, чтобы не были равны ID(так мы исключим кучу дублей) и 
count(так мы как-раз и найдем с одинаковым номером но разной суммой).  */
select distinct ct.* 
from cte ct
    inner join cte ctt on ct.numOrder=ctt.numOrder
where ct.id<>ctt.id and ct.count<>ctt.count

Создание CTE и добавление ID тут нужно для того, чтобы отсечь дублирующие значения.

→ Ссылка