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

3 番目の行には一致する負のオフセットがないため、最初の 2 行のみを返す必要があります。

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

そして、一致する支払いのリストが表示されます。一致しないレコードを見つけたいだけの場合は、intersect の代わりに Except を使用できます。(請求システムで不均衡な支払いをマークするためのフラグ フィールドがある場合に備えて、上記を実行して更新に渡した場合のように。)

上記を CTE で使用し、それを更新にフィードします。

于 2013-05-20T15:40:53.517 に答える