首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从两个表中获取行

从两个表中获取行
EN

Stack Overflow用户
提问于 2012-12-22 21:55:15
回答 3查看 126关注 0票数 2

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

我有两个sql表,分别记录有关销售和收货的信息。

待售表格

代码语言:javascript
运行
复制
VoucherType     VoucherNo       CreditParty     CreditAmount
Sales           1               3               5000
Sales           2               5               10000

对于收款表

代码语言:javascript
运行
复制
Vouchertype     VoucherNo       Amount          OppVoucherType       OppVoucherNo
Receipt         1               3000            Sales                1

现在您可以看到,收款表包含有关已支付哪张销售凭证的信息。例如,在这里,我用销售券1向第三方销售了5000件商品,第三方仅向我支付了3000的金额,而销售账单为5000。在收款表中,我在第一次收款时收到了第三方3000的金额。

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

现在我想要的是显示,SALESVOUCHERNO和剩余的金额,以支付上述数据的每一方。

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

你能帮帮我吗?

我尝试了以下查询,但出现了意外的结果

代码语言:javascript
运行
复制
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
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-12-22 22:04:08

像这样使用LEFT JOIN

代码语言:javascript
运行
复制
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

这将为您提供:

代码语言:javascript
运行
复制
| VOUCHERNO | CREDITAMOUNT | REMAINING AMOUNT TO PAY |
------------------------------------------------------
|         1 |         5000 |                    2000 |
|         2 |        10000 |                   10000 |

LEFT JOIN将包括Receipt表中不匹配的行,这些行是那些没有收据的奇偶校验。然后使用IFNULL而不是NULL来获取零。

假设第二个表中有一个新条目,如下所示:

代码语言:javascript
运行
复制
('Receipt', 1, 1000, 'Sales', 1) 

然后,查询将处理此问题,并将提供以下信息:

代码语言:javascript
运行
复制
| VOUCHERNO | CREDITAMOUNT | REMAINING AMOUNT TO PAY |
------------------------------------------------------
|         1 |         5000 |                    1000 |
|         2 |        10000 |                   10000 |
票数 3
EN

Stack Overflow用户

发布于 2012-12-22 21:59:03

代码语言:javascript
运行
复制
Select v1.voucherno,v1.creditamount-v2.amount from Sales v1
inner join Receipt v2 on v1.vouchertype=v2.oppvouchertype and v1.voucherno=v2.oppvoucherno
票数 0
EN

Stack Overflow用户

发布于 2012-12-22 22:33:02

希望这能帮上忙

代码语言:javascript
运行
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14003421

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档