2013-03-06 2 views
0

У меня есть 3 строки, но мне нужно определить только строки, которые смещены, что означает, что положительная сумма соответствует отрицательной сумме, для той же комбинации + счет + + номер счета +.Поиск строк, соответствующих положительным и отрицательным

Vendor_Code Invoice_Number Check_Number Payment_Amount Subcontract_Job 
----------- -------------- ------------ -------------- --------------- 
DEVONEL  6462   35272    8257.50  BUP008 
DEVONEL  6462   35272   -8257.50  BUP008 
DEVONEL  6462   35665    8257.50  BUP008 

Должны быть возвращены только первые две строки, поскольку третья строка не имеет соответствующего отрицательного смещения.

+0

Как вы определяете "first 2"? –

+0

Итак, каковы точные критерии для * duplicate *? –

+0

верхняя часть с чеком # 35272 – user2022883

ответ

2
SELECT x1.<cols>, x2.<cols> 
FROM dbo.YourTable AS x1 
INNER JOIN dbo.YourTable AS x2 
    ON x1.Vendor_Code = x2.Vendor_Code 
AND x1.Invoice_Number = x2.Invoice_Number 
AND x1.Check_Number = x2.Check_Number 
AND x1.Payment_Amount = -x2.Payment_Amount; 
0

Если суммы совпадают (нет округления разницы или какого-то «она близка к» типу проблема с суммами, - если так думать о округлении поля суммы или добавления/вычитании . маржа от него), то вы можете сделать сравнение на основе набора, как:

Select VendorCode, InvoiceNumber, CheckNumber, Amount from dbo.tablename 
intersect 
Select VendorCode, InvoiceNumber, CheckNumber, Amount from dbo.tablename 

И это даст вам список соответствующих платежей. Если вы просто хотите найти несоответствующие записи, вы можете использовать Except вместо intersect. (Как если бы вы сделали это и передали в обновление, у вас было поле флага для отметки несбалансированных платежей в системе выставления счетов.)

Я бы использовал приведенное выше в CTE, а затем передал его в обновление ,

Смежные вопросы