gpt4 book ai didi

sql - 从两个表中获取行

转载 作者:行者123 更新时间:2023-12-04 05:17:55 25 4
gpt4 key购买 nike

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

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

出售 table

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 件商品。
为此,第三方仅向我支付了 5000 美元的销售账单金额的 3000 美元。
在收据表中,我在第一次收据中从第 3 方收到了 3000 的金额。

现在,第三方还需要给我 2000 的金额,而第五方仍然需要支付我 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

最佳答案

使用 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 Fiddle Demo

这会给你:
| 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 |

关于sql - 从两个表中获取行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14003421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com