Sql 从两个表中获取行
我正在给会计系统编码。 在这里,我面临一个如下所述的问题 我有两个sql表,分别记录有关销售和收据的信息 待售表格Sql 从两个表中获取行,sql,Sql,我正在给会计系统编码。 在这里,我面临一个如下所述的问题 我有两个sql表,分别记录有关销售和收据的信息 待售表格 VoucherType VoucherNo CreditParty CreditAmount Sales 1 3 5000 Sales 2 5 10000 用于收据表 Vouchertype V
VoucherType VoucherNo CreditParty CreditAmount
Sales 1 3 5000
Sales 2 5 10000
用于收据表
Vouchertype VoucherNo Amount OppVoucherType OppVoucherNo
Receipt 1 3000 Sales 1
现在您可以看到,收据表包含已付款的销售凭证的信息。
例如,我在这里用销售凭证1向第三方销售了5000件商品。
为此,第三方只向我支付了5000美元的销售账单上的3000美元。
在收据表中,我在第一次收据中收到了来自第三方的3000美元
现在,第三方仍然需要给我2000美元,第五方仍然需要支付我10000美元,因为第五方没有收据
现在,我想要的是显示,SalesVoucheno和剩余金额支付各方从上述数据
简言之,我需要各方的数据,这些数据仍然需要向我支付剩余金额
你能帮我吗
我尝试了以下查询,结果出乎意料
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
像这样使用
左连接
:
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;
这将为您提供:
| VOUCHERNO | CREDITAMOUNT | REMAINING AMOUNT TO PAY |
------------------------------------------------------
| 1 | 5000 | 2000 |
| 2 | 10000 | 10000 |
| VOUCHERNO | CREDITAMOUNT | REMAINING AMOUNT TO PAY |
------------------------------------------------------
| 1 | 5000 | 1000 |
| 2 | 10000 | 10000 |
LEFT JOIN
将包括Receipt
表中不匹配的行,这些行是没有收据的对价。然后使用IFNULL
获取零,而不是NULL
假设第二个表中有一个新条目,如:
('Receipt', 1, 1000, 'Sales', 1)
然后查询将处理该问题,它将为您提供:
| VOUCHERNO | CREDITAMOUNT | REMAINING AMOUNT TO PAY |
------------------------------------------------------
| 1 | 5000 | 2000 |
| 2 | 10000 | 10000 |
| VOUCHERNO | CREDITAMOUNT | REMAINING AMOUNT TO PAY |
------------------------------------------------------
| 1 | 5000 | 1000 |
| 2 | 10000 | 10000 |
希望这有帮助
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;
这没用,如果我再输入一个剩余2000金额的收据条目怎么办?为此,我需要根据销售金额计算所有收据金额的总和。这就产生了问题。好吧,我没说,但很明显,任何一方的剩余金额都会有第二个收据条目。所以我问。@HemalRathod-好吧,很抱歉我错过了。请参阅我的编辑。现在应该可以用了。测试并告诉我。@Hemal Rathod如果这对你有帮助,你能检查我的答案吗