Office中国论坛/Access中国论坛

标题: 妖怪问题求高手破解 [打印本页]

作者: poika    时间: 2019-4-14 10:37
标题: 妖怪问题求高手破解
表A

表B

如果是从SQL中链接过来的 那么查询结果是

如果将两张表转换到本地,那么查询结果是这样的


SQL语句:SELECT [p].料号id, [p].客户id, Sum([进库数量]) AS 进库总数, Sum([出库数量]) AS 出库总数 FROM (SELECT 成品明细_结存.料号id,成品明细_结存.客户id,0 as 出库数量,成品明细_结存.结存数量 as 进库数量 FROM 成品明细_结存
UNION ALL select 成品明细.料号id,成品明细.客户id,成品明细.出库数量,成品明细.进库数量 FROM 成品明细 where 成品明细.结存状态='待完成') AS p GROUP BY [p].料号id, [p].客户id;
查询语句是同一个,但结果不一样
求高手破解,有没有知道问题出在哪里的,感激不尽,试了各种方法,能力有限找不出问题
作者: poika    时间: 2019-4-14 10:41
表A设计视图

表B设计视图


我也试过把那个查询分成2个
查询2:SELECT 料号id,客户id, 0 as 出库数量,成品明细_结存.结存数量 as 进库数量, 0 as 出库重量,成品明细_结存.结存重量 as 进库重量 FROM 成品明细_结存
UNION ALL select 料号id,客户id,成品明细.出库数量,成品明细.进库数量,成品明细.出库重量,成品明细.进库重量 FROM 成品明细 where 成品明细.结存状态='待完成'
结果正确的

然后对查询2 汇总求和就不对了,进库数量是正确的,但是出库就不对了
SQL:SELECT 查询2.料号id, 查询2.客户id, Sum(查询2.出库数量) AS 出库数量之合计, Sum(查询2.进库数量) AS 进库数量之合计
FROM 查询2
GROUP BY 查询2.料号id, 查询2.客户id;
结果:


如果把SQL语句写到 SQL server 中结果都是是正确的,但是在ACCESS中写就不对了
或者把语句写在ACCESS中,把那两个链接表转化为ACCESS本地表结果也是正确的
郁闷好久了啊
作者: tmtony    时间: 2019-4-15 12:55
1.看看 2表链接关系
2.看看 有些字段是否 无默认值造成的?
作者: poika    时间: 2019-4-15 16:19
tmtony 发表于 2019-4-15 12:55
1.看看 2表链接关系
2.看看 有些字段是否 无默认值造成的?

谢谢回复!
试过了不行
作者: roych    时间: 2019-4-16 10:27
初步判断应该是多对多所引起的笛卡尔乘积问题。不过看不到图,也看不到附件,所以也不敢妄言。以下链接供参考:
http://www.office-cn.net/thread-122846-1-1.html
作者: poika    时间: 2019-4-16 11:40
roych 发表于 2019-4-16 10:27
初步判断应该是多对多所引起的笛卡尔乘积问题。不过看不到图,也看不到附件,所以也不敢妄言。以下链接供参 ...

谢谢你,经过你的启发我换了种方式写查询语句已经解决了结果不正确的问题,但是原来的查询为什么错,错在哪里我还是没搞明白。心里很难受的
如果图挂了,能劳烦看下百度贴吧的一个帖子,一样的问题
tieba.baidu.com/p/6098809230?pid=125085518938#125085518938

作者: roych    时间: 2019-4-16 12:24
poika 发表于 2019-4-16 11:40
谢谢你,经过你的启发我换了种方式写查询语句已经解决了结果不正确的问题,但是原来的查询为什么错,错在 ...

翻了下。应该就是我的链接所提及的问题。只不过你这个问题更隐秘以下罢了。——你用了双主键。
应该改成ID作为主键,把双主键的改为索引,再进行处理。

双主键,通常会引发重复计算问题。在Access里不建议使用(事实上,在任何数据库都不太建议使用的)。一般来说,双主键是没有存在的必要性的。任何双主键,都可以改成单主键的,一个自动编号即可,把原先的双主键拆分为两个索引。这时候,自动编号便是唯一值了。如在其他表需要使用双主键关联的话,可以用这个自动编号作为外键去关联。
作者: poika    时间: 2019-4-16 12:57
roych 发表于 2019-4-16 12:24
翻了下。应该就是我的链接所提及的问题。只不过你这个问题更隐秘以下罢了。——你用了双主键。
应该改成 ...

恩恩 真的谢谢!
下午我去试试看!
作者: poika    时间: 2019-4-17 09:38
roych 发表于 2019-4-16 10:27
初步判断应该是多对多所引起的笛卡尔乘积问题。不过看不到图,也看不到附件,所以也不敢妄言。以下链接供参 ...

谢谢高手!已经解决就是你说的问题,我改了主键结果就正确了。
这次让我涨知识了,我以前貌似经常用双主键,以后肯定不用了。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3