Office中国论坛/Access中国论坛

标题: 全连接数据 不能完全出来的问题!请教大神,谢谢! [打印本页]

作者: 玻璃球    时间: 2021-4-15 16:16
标题: 全连接数据 不能完全出来的问题!请教大神,谢谢!
图1
[attach]64022[/attach]
图2
[attach]64023[/attach]

图1是表,图2是查询,图1的数据在图2不能显示,请大神赐教,我做的是全连接,但是不能显示。[attach]64024[/attach]

作者: aslxt    时间: 2021-4-15 23:03
是不是这个:
SELECT tmp.合同编号, Count(tmp.销项发票汇总) AS 销项发票汇总之计算, Sum(tmp.销项发票次数) AS 销项发票次数之总计, Sum(tmp.进项发票汇总) AS 进项发票汇总之总计, Sum(tmp.进项发票次数) AS 进项发票次数之总计
FROM (SELECT Q_销项发票汇总.合同编号, Q_销项发票汇总.销项发票汇总, Q_销项发票汇总.销项发票次数, 0 as 进项发票汇总, 0 as 进项发票次数
FROM Q_销项发票汇总

UNION SELECT 合同编号, 0 as 销项发票汇总, 0 as 销项发票次数, Q_进项发票汇总.进项发票汇总, Q_进项发票汇总.进项发票次数
FROM  Q_进项发票汇总 )  AS tmp
GROUP BY tmp.合同编号;
作者: roych    时间: 2021-4-17 01:41
按我的理解,全连接就是求两个表(或者查询)的并集。
在解释这个问题之前,先说一个公理:
如果AB(包含于),那么A∪B=B(并)(如果数学没过关,请自行借一本高一课本来看看)。

一旦出现上述情况,则不应该用全连接。

而楼主的数据源里,而“Q_销项发票汇总”和“Q_进项发票汇总”的合同编号分别相当于上述的A、B集。全连接的结果应该只剩一个B集。具体请参考附件中“左连接”和“右连接”两个查询。

但楼主的结果是:“Q_进项发票汇总”和“Q_销项发票汇总”都出现了,为什么呢?那是因为把其他字段(比如,发票金额)也视为集合的一部分了。因此,只要还用全连接的写法,两边的关联字段不完全一致,必然会出现个别为空的字段。——不知道这样解释,楼主是否理解了。

说完问题,接下来就该说解决方案了。事实上,解决方案很简单,就是把所有合同编号列出来,根据通过IIF函数,设置条件统计即可。详见“结果表”。这里就不细说了。值得注意的是,统计次数用sum来代替count,是为了避免同一合同编号既有进项又有销项的情况。

最后说一句,楼上是从另一个角度上来解决这个问题:将两个查询视为无交集的两个集合,通过联合查询,并集自然就迎刃而解了。美中不足的是,嵌套子查询的写法,新手可能不容易理解(这里只是站在新手的立场上,如有冒犯还望海涵)。
[attach]64028[/attach]

作者: 玻璃球    时间: 2021-4-20 21:44
roych 发表于 2021-4-17 01:41
按我的理解,全连接就是求两个表(或者查询)的并集。
在解释这个问题之前,先说一个公理:
如果A⊂ ...

感谢大神的回复,前两天在忙,没有及时回复,我弄了半天,初学,很多东西不是很懂,谢谢讲解
作者: 玻璃球    时间: 2021-4-20 22:16
aslxt 发表于 2021-4-15 23:03
是不是这个:
SELECT tmp.合同编号, Count(tmp.销项发票汇总) AS 销项发票汇总之计算, Sum(tmp.销项发票次 ...

谢谢大神回复,还是看不懂,对代码这种不是很明白
作者: aslxt    时间: 2021-4-23 07:14
玻璃球 发表于 2021-4-20 22:16
谢谢大神回复,还是看不懂,对代码这种不是很明白

查询的语句啊,就是查询的SQL视图所看到的.




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