找到匹配正面和负面的行

时间:2013-03-06 19:52:35

标签: sql sql-server-2008

我有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

只返回前两行,因为第三行没有匹配的负偏移量。

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

如果金额相同(没有舍入差异或某种“接近”类型的金额问题 - 如果是这样,请考虑舍入金额字段或添加/减去保证金。 )然后你可以做一个基于集合的比较,如:

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

它会为您提供匹配付款的列表。如果您只想查找不匹配的记录,可以使用Except而不是相交。 (如果您执行了上述操作并将其传递给更新,则会在发票系统中标记非平衡付款的标记字段。)

我会在CTE中使用上述内容,然后将其提供给更新。