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 тут нужно для того, чтобы отсечь дублирующие значения.