access多表联合查询运用

有两个表,订单表和生产表
订单表,有ID,订单号,物料编码,物料描述,印字,订单数量字段,包含如下对应内容
1,4900003400,AH0000001,SS3401,A1,2000
2,4900003400,AH0000002,SS3402,A2,3000
3,4900003400,AH0000001,SS3401,A1,1000
4,4900003400,AH0000001,SS3401,A1+,12000
5,4900003401,AH0000001,SS3401,A1,6000
生产表,有生产ID,订单号,物料编码,物料描述,印字,生产数量字段,包含如下对应内容
1,4900003400,AH0000001,SS3401,A1,50
2,4900003400,AH0000001,SS3401,A1,10
请问如何通过联合查询,得到如下结果
订单号 物料编码 物料描述 印字 订单数量 生产数量 未安排数量
4900003400 AH0000001 SS3401 A1 3000 60 2940
4900003400 AH0000001 SS3401 A1+ 12000 0 12000
4900003400 AH0000002 SS3402 A2 3000 0 3000
4900003401 AH0000001 SS3401 A1 6000 0 6000

先将订单表进行合计 as A
select [订单号],[物料编码],[物料描述],[印字],sum([订单数量字段]) as [订单QTY] from [订单表] group by [订单号],[物料编码],[物料描述],[印字]

再将生产表合计 as B
select [订单号],[物料编码],[物料描述],[印字],sum([生产数量字段]) as [生产QTY] from [生产表] group by [订单号],[物料编码],[物料描述],[印字]

然后A左联B
select A.* ,B.[生产QTY], A.[订单QTY]-B.[生产QTY] as [未安排数量] from A
left join B on A.[订单号]=B.[订单号] and A.[物料编码]=B.[物料编码] and A.[物料描述]=B.[物料描述] and A.[印字]=B.[印字]

哎呦打了这么多字累死了, 记得把所有中文的逗号都换成英文的逗号追问

请问是关联哪几个字段

当表A所要求字段不与表B对等,那生产数量怎么是空白的,不是为0呢

追答

left join右边不就是关联字段吗? 你数数看几个
空白变0好办,NZ函数 NZ(B.[生产QTY],0) as [生产数量]

追问

这段语句应该加在哪里

追答

select A.* ,B.[生产QTY], A.[订单QTY]-B.[生产QTY] as [未安排数量] from A
left join B on A.[订单号]=B.[订单号] and A.[物料编码]=B.[物料编码] and A.[物料描述]=B.[物料描述] and A.[印字]=B.[印字]
你觉得这句语句中加在哪里合适?

追问

还想请教你一个问题,就是除了左联和右联,还有其他连接吗

我对那语句不懂也,只是知道达不到那个相等的条件,生产数量就要为0

追答

inner join left join right join cross join full join, 有的access不支持, 详情可以百度
A不懂还是B不懂,还是A left join B不懂?

追问

像我这个表,可能出现一种情况,就是B表有的,A表可能没有,A表有的, B表可能没有。请问这该用哪种连接

追答

从需求上讲, 你的流程应该以一个为基础,要么以订单为基础去找生产,要么以生产去找定单. 从现实里任何一个流程的需求都有一个起点才合理
从技术上讲, full join符合你的需求,但是MS_SQL支持full join,access不支持,需要用复杂一点的语法去实现full join, 先左联,然后右联,再用 union 去除重复记录,最后得到的查询结果就是full join

追问

谢谢呵……

温馨提示:答案为网友推荐,仅供参考