请求合并两个MS Access SQL查询以获取单一输出结果
合并MS Access两个SQL查询的解决方案
嘿,我来帮你把这两个查询合并成一个,这样就能一次性拿到销售总额和付款总额的结果啦!
思路分析
你的第一个查询是计算符合条件的销售单的总销售额(sum(qty*price)),第二个是计算对应销售单的总付款额(sum(b.pamount))。我们可以把这两个查询分别作为子查询,然后通过salesid关联起来,同时保留客户名称的过滤条件。
合并后的SQL代码
SELECT s.salesid, s.salesdate, s.customername, s.total_sales, Nz(p.total_payment, 0) AS total_payment FROM ( SELECT a.salesid, a.salesdate, a.customername, SUM(b.qty * b.price) AS total_sales FROM tblsales a INNER JOIN tblsales_details b ON b.salesid = a.salesid WHERE a.customername LIKE '%arvin%' GROUP BY a.salesid, a.salesdate, a.customername ) AS s LEFT JOIN ( SELECT a.salesid, SUM(b.pamount) AS total_payment FROM tblsales a INNER JOIN tblpayments b ON b.salesid = a.salesid WHERE a.customername LIKE '%arvin%' GROUP BY a.salesid ) AS p ON s.salesid = p.salesid;
代码说明
- 子查询
s:负责计算每个销售单的总销售额,和你原来的查询1逻辑一致,给总和起了别名total_sales方便后续调用。 - 子查询
p:负责计算每个销售单的总付款额,对应你的查询2逻辑,起别名total_payment。 LEFT JOIN关联:确保即使某个销售单还没有付款记录,也会被保留在结果里,不会被过滤掉。Nz(p.total_payment, 0):Access专属的Nz函数可以把NULL值替换成0,避免没付款的记录显示空值,让结果更整洁。
示例输出
基于你给出的查询1结果,假设对应付款总额为80000,合并后的输出会是:
| salesid | salesdate | customername | total_sales | total_payment |
|---|---|---|---|---|
| 001 | 1/1/1970 | arvin | 109500 | 80000 |
内容的提问来源于stack exchange,提问作者JuanMan
相关产品推荐
相关产品推荐

