access2013 两个表汇总查询,为什么算出来的结果比实际大很多。怎么解决?

计算入库总量,出库总量,库存总量,汇总的结果在最后一张图,算出的结果翻了多倍。为什么,怎么解决?

表与表进行连接后输出的总行数是两张表各自关联行数的笛卡尔乘积,这规则对于任何连接方式都是一视同仁的。对于这一点在涉及连接的情况下,统计汇总数要特别小心!


例如A表关联字段ID=1的行有2行,B表关联字段ID=1的行有3行,那么连接后ID=1的行将会有2x3=6行。


题主的"入库明细"和"出库明细"的每个"商品编码"下有多条记录这样连接后肯定要返回很多倍于原有记录的行数,对这样的结果集汇总,其汇总数自然要比实际数大很多,这也是导致统计数不正确的原因所在。


那么如何避免因笛卡尔乘积导致的汇总数不正确呢?解决办法有多种种,例如:一是在连接前就算好汇总数;二是使用union all; 三是确保至少一方表是唯一的情况下进行连接,这样连接后笛卡尔乘积输出规则不会导致输出行数的增加,因为1乘以任何数还是任何数; 。。。


题主这个统计输出比较复杂,用查询设计视图编写查询已经力不从心了,建议转到SQL设计视图进行查询设计。下面是使用UNION ALL的办法,它可以返回正确汇总数的SQL语句代码,供题主参考:

select t.商品编码,sum(t.rk) as 入库数量,
sum(t.ck) as 发货数量,sum(t.rk-t.ck) as 库存 from 
(select 商品编码,入库数量 as rk ,0 as ck from 入库明 
union all 
select 商品编码, 0,发货数量  from 出库明细) t  
group by t.商品编码;

温馨提示:内容为网友见解,仅供参考
无其他回答

...两个表汇总查询,为什么算出来的结果比实际大很多。怎么解决?_百度...
那么如何避免因笛卡尔乘积导致的汇总数不正确呢?解决办法有多种种,例如:一是在连接前就算好汇总数;二是使用union all; 三是确保至少一方表是唯一的情况下进行连接,这样连接后笛卡尔乘积输出规则不会导致输出行数的增加,因为1乘以任何数还是任何数; 。。。题主这个统计输出比较复杂,用查询设计视图...

Access多个表查询汇总结果怎么不对呀,求高手指点!
不能这样汇总的。每个表中相同年、月、代码的数据有可能有多行,你这样连接下来统计的结果可能比正确结果要大。正确的做法是:首先将三张表按照年、月、代码分组,分别统计总量,然后将统计结果通过年、月、代码关联起来返回结果。

在ACCESS程序里如何对比两个表格的不同,并输出不同答案
这个问题可以通过创建更新查询来解决,步骤如下:1、与sheet1一样将sheet2也添加一个ID字段并分别设为主键;2、创建更新查询,添加sheet1和sheet2,将两表ID建立关系;3、拖入sheet1的shuchu字段;4、在更新到栏目中填入IIF(sheet1!字段1=sheet2!字段1,"1","2");5、保存查询并退出;6、双...

如何对access数据库的两个表进行重复比对?
你要的结果用两个查询解决比较简单:1.查A表有B表无。2.查B表有A表无。方法是建立一个简单查询,添加A表和B表,将身份证号建立关系。第一个查询的关系选择“包含A表全部记录”将B表身份证号的条件设为“IS NULL"。第二个查询的关系选择“包含B表全部记录”将A表身份证号的条件设为“IS ...

Access中如何同时删除两个表中ID相同的记录
其它回答: 在Access或SQL SERVER中用SQL删除重复记录的N种方法 2009-11-10 16:34 例如: id name value 1 a pp 2 a pp 3 b iii 4 b pp 5 b pp 6 c pp 7 c pp 8 c iii id是主键 要求得到这样的结果 id name value 1 a pp 3 b iii 4 b pp 6 c pp 8 c iii 方法1 ...

关于access两个没有建立关系的表做查询的问题
分别点击表1A字段拖向表2A字段,表1B拖向表2B...,以此类推),假如要统计的对象在表1字段E的记录中,就将表1E字段拖入下方的查询字段列表两次,点击工具栏的西格玛符号进入汇总状态,第一个E字段的总计属性保持分组不变,将第二个E字段总计属性改为计数,运行查询就可以得到你想要的结果了。

access数据库 两个表 关联 去重复的查询
因为可能有两个月相同最大积分,所以选取a中id较大的一个编号记录 上面写了yuejifen ,zongjifen类似情况 3、如果想列一个比较全面的max(yuejifen),max(zongjifen)表,就需要将查询进行进一步的关联查询 最好不要见a.id列出,最大yuejifen对应的a.id 与最大zongjifen 对应的a.id不都是同一个值...

access中两个表中两个字段的查找?
该字段显示的是表达式的结果,而不是存储的数据。每次表达式中的值发生更改时,都会重新计算该值。).当计算结果显示在字段中时,结果实际上并不存储在基础表中。相反,microsoft access 每次执行查询时都会重新计算,以便结果始终基于数据库中的最新数据。因此,计算结果不能手动更新。

ACCESS中有2个表,想找出2个表不一样的数据,SQL查询怎么写?
3、SELECT t2.* FROM t2 LEFT JOIN t1 ON t2.id=t1.id WHERE t1.id is null 三种方法都得不到所想要的不同内容的结果(VB编程,语法正确,结果为空),崩溃了。我有表1=Standard_Data1 ,表2=Standard_Data2,两个表里面只有1列数据为MSISDN,下面SQL语句没法找到不同的内容。select * ...

access中查询设计器想要用计算出的字段来进行和其他字段的比较
2、解决的办法是分2步走,可按如下方法:首先,建立一个汇总查询,如下 它会得出如下结果:尺寸 价格 14 10001 12 8000 其次,再建立一个查询,要添加表1和前面建立的查询1,并建立关系,如下 只要直接运行查询2,它的结果,如下 这样就满足你的要求了。3、若用SQL语句,可一次执行以上的...

相似回答