2

我正在编码会计系统。在这里,我面临如下所述的问题。

我有两个 sql 表,分别记录有关 SALE 和 RECEIPT 的信息。

出售表

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 号方仅向我支付了 3000 的金额和 5000 的销售单。在收据表中,我从一方收到了 3000 的金额3 在第一次收据中。

现在,第 3 方仍然需要给我 2000 的金额,第 5 方仍然需要支付我 10000 的金额,因为第 5 方没有收据。

现在我想要的是从上述数据中显示、销售和剩余金额为每一方支付。

简而言之,我需要各方的数据,仍然需要向我支付剩余金额。

你能帮助我吗?

我尝试了以下查询,但结果出乎意料

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.

假设第二个表有一个新条目,例如:

('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;

小提琴演示

于 2012-12-22T14:33:01.517 回答