3

とテーブルがinvoicesありpaymentsます。

invoiceレコード (OriginalInvoiceValueフィールドを含む) について、複数の支払いが支払いテーブルに関連付けられている可能性があります。select2 つのテーブルを結合する では、関連付けられたレコードが出現するたびに各レコードinvoiceが繰り返されますpayment

私が望むのは、OriginalInvoiceValueフィールドが ごとinvoiceに1 回だけ返され、関連付けられたレコードが追加で出現するたびにフィールドが返される0(または) ようにすることです。(データを Excel にエクスポートして列を合計すると、実際にはすべての請求書の実際の合計が得られ、追加の支払いが発生するたびに乗算されます)。NULLpaymentOriginalInvoiceValue

これは T-SQL で可能ですか?

4

1 に答える 1

1

Sql Server 2005 以降の場合、請求書の個々の支払いに行番号を割り当て、最初の支払いのみの実際の請求書レコードを選択して請求書に結合したままにすることができます。row_number()一部必要な方はご注文下さい。私は PaymentID を選択しましたが、支払日の方が適切かもしれません。

; with p as (
  select *,
         row_number() over (partition by InvoiceID
                            order by PaymentID) rn
    from payments
)
select *
  from p
  left join invoices i
    on p.InvoiceID = i.InvoiceID
   and p.rn = 1
order by p.InvoiceID, rn

そして、ここに SQL FIDDLE と example があります

于 2012-07-10T11:08:16.520 に答える