|
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用 · 内置多项VBA编程加强工具 ★ 免费下载 ★ ★ 使用手册★
首先,你说 “ “其中承兑”(总金额)为回款明细表中的结算方式中的承兑 ”,问题是,回款明细表中,虽然有[结算方式]这个字段,但是它的承兑是怎么计算出来的?这个需要说明一下。
其次,你说“ “承兑比例”为回款明细中的承兑总额/回款总额 ”。但是回款明细表中根本就没有[承兑总额]和[回款总额]这两个字段。所以你先要告诉我,这两个字段是哪里来的?
在不清楚你上面的问题的基础上,下面是我自己的理解:
1)“其中承兑”就是回款明细表中,[结算方式]为“承兑”的相关记录的[回款金额]的总和。(这个总和,也是按照[业务员]、[购货单位]和[执行分厂]进行分组)
2)“承兑比例”就是回款明细表中,按照[业务员]、[购货单位]和[执行分厂]进行分组,然后把[结算方式]为“承兑”的[回款金额]进行汇总(也就是你说的“其中承兑”),除以所有[回款金额]总和的比例。
在我的理解的基础上,这个查询应该是这么做的:(显然,这样子一来,就跟“发货明细”这个表没有关系了,所以你原来的查询中的UNION子查询是多余的)
SELECT A.业务员, A.结算方式, A.执行分厂, A.其中承兑, B.回款总额, A.其中承兑/B.回款总额 AS 承兑比例
FROM (SELECT 回款明细.业务员, 回款明细.结算方式, 回款明细.执行分厂, Sum(回款明细.回款金额) AS 其中承兑 FROM 回款明细 WHERE 回款明细.结算方式="承兑" GROUP BY 回款明细.业务员, 回款明细.结算方式, 回款明细.执行分厂) AS A INNER JOIN (SELECT 回款明细.业务员, 回款明细.结算方式, 回款明细.执行分厂, Sum(回款明细.回款金额) AS 回款总额 FROM 回款明细 GROUP BY 回款明细.业务员, 回款明细.结算方式, 回款明细.执行分厂) AS B ON A.执行分厂 = B.执行分厂 AND A.结算方式 = B.结算方式 AND A.业务员 = B.业务员;
这个查询只会显示[结算方式]为“承兑”的记录。如果你需要显示所有的[结算方式],可以使用下面的查询:
SELECT B.业务员, B.结算方式, B.执行分厂, A.其中承兑, B.回款总额, A.其中承兑/B.回款总额 AS 承兑比例
FROM (SELECT 回款明细.业务员, 回款明细.结算方式, 回款明细.执行分厂, NZ(Sum(回款明细.回款金额),0) AS 其中承兑 FROM 回款明细 WHERE 回款明细.结算方式="承兑" GROUP BY 回款明细.业务员, 回款明细.结算方式, 回款明细.执行分厂) AS A RIGHT JOIN (SELECT 回款明细.业务员, 回款明细.结算方式, 回款明细.执行分厂, Sum(回款明细.回款金额) AS 回款总额 FROM 回款明细 GROUP BY 回款明细.业务员, 回款明细.结算方式, 回款明细.执行分厂) AS B ON A.执行分厂 = B.执行分厂 AND A.结算方式 = B.结算方式 AND A.业务员 = B.业务员;
测试的话,请在你原来的Access数据库中,新建一个查询,然后复制粘贴上面蓝色字体的SQL语句就可以了。
|
|