2

私は会計システムをコーディングしています。ここで私は以下に説明するような問題に直面しています。

SALEとRECEIPTに関する情報をそれぞれ記録する2つのSQLテーブルがあります。

販売テーブル用

VoucherType     VoucherNo       CreditParty     CreditAmount
Sales           1               3               5000
Sales           2               5               10000

レシートテーブル用

Vouchertype     VoucherNo       Amount          OppVoucherType       OppVoucherNo
Receipt         1               3000            Sales                1

これで、レシートテーブルに、支払われた販売バウチャーに関する情報が含まれていることがわかります。たとえば、ここでは、販売伝票1を使用してパーティー3に5000個の商品を販売しました。この場合、パーティー3は5000個の売渡証に対して3000個の金額しか支払っていません。レシートテーブルでは、パーティーから3000個の金額を受け取りました。最初の領収書で3。

さて、パーティー3はまだ2000の金額を私に与える必要があり、パーティー5はパーティー5の領収書がないため、私に10000の金額を支払う必要があります。

今私が欲しいのは、上記のデータから各当事者に表示、SALESVOUCHERNO、および残りの支払い額です。

要するに、私はまだ私に残りの金額を支払う必要がある各当事者のデータが必要です。

手伝って頂けますか?

次のクエリを試してみましたが、予期しない結果になりました

Select v1.voucherno,v1.creditamount-v2.amount from Sales v1
inner join Receipt v2 on v1.vouchertype=v2.oppvouchertype
inner join Receipt v3 on v1.voucherno=v3.oppvoucherno
4

3 に答える 3

3

LEFT JOINそのように使用します:

Select 
  v1.voucherno,
  v1.creditamount,
  v1.creditamount - IFNULL(v2.totalamount, 0) AS "REMAINING AMOUNT TO PAY"
from Sales v1
LEFT join
(
  SELECT oppvoucherno, OppVoucherType, SUM(amount) totalamount
  FROM Receipt
  GROUP BY voucherno, OppVoucherType
) v2  on v1.vouchertype = v2.oppvouchertype
                     AND v1.voucherno = v2.oppvoucherno;

SQLフィドルデモ

これはあなたに与えるでしょう:

| VOUCHERNO | CREDITAMOUNT | REMAINING AMOUNT TO PAY |
------------------------------------------------------
|         1 |         5000 |                    2000 |
|         2 |        10000 |                   10000 |

LEFT JOINテーブルの一致しない行が含まれReceiptます。これは、領収書がなかったパリティです。次に、を使用IFNULLして、の代わりにゼロを取得しますNULL

次のように、2番目のテーブルに新しいエントリがあったとします。

('Receipt', 1, 1000, 'Sales', 1) 

次に、クエリがそれを処理し、次のようになります。

| VOUCHERNO | CREDITAMOUNT | REMAINING AMOUNT TO PAY |
------------------------------------------------------
|         1 |         5000 |                    1000 |
|         2 |        10000 |                   10000 |
于 2012-12-22T14:04:07.717 に答える
0
Select v1.voucherno,v1.creditamount-v2.amount from Sales v1
inner join Receipt v2 on v1.vouchertype=v2.oppvouchertype and v1.voucherno=v2.oppvoucherno
于 2012-12-22T13:59:02.707 に答える
0

お役に立てれば、

select s.VoucherNo as SALESVOUCHERNO,
case  when s.VoucherNo=r.VoucherNo then abs(s.CreditAmount-r.Amount)
else s.CreditAmount   
end
from sale s left outer join receipt r
on s.VoucherNo=r.VoucherNo;

fiddle_demo

于 2012-12-22T14:33:01.517 に答える