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

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

4

2 回答 2

3
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;
于 2013-03-06T20:22:01.577 回答
0

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

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

它会给你匹配的付款清单。如果您只想查找不匹配的记录,您可以使用 except 而不是 intersect。(就像您执行上述操作并将其传递到更新中,以防您有一个标志字段来标记发票系统中的非平衡付款。)

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

于 2013-05-20T15:40:53.517 回答