标题:二表SUM后合并,为何得出错误结果?
只看楼主
xxwyyf007
Rank: 2
等 级:论坛游民
帖 子:24
专家分:14
注 册:2016-4-26
结帖率:60%
 问题点数:0 回复次数:14 
二表SUM后合并,为何得出错误结果?
单表各自求和的结果是正确的,但二表求和后合并的结果是错误的。
如下图





请问:
(1)正确的语句是什么?
(2)XP系统下access2000中不支持ISNULL吗?空值处本想显示为“0”,但报错
(3)最想要的full join,但报错的,是VB6不支持的吗?
 谢谢!!!

moretable.zip (16.38 KB)



程序代码:
Dim cn As ADODB.Connection
Dim rs1, rs2, rs3 As ADODB.Recordset

Private Sub Form_Load()
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " & App.Path & "\rc.mdb"
   '//////////////////////////
   Set rs1 = New ADODB.Recordset
        rs1.Open "select 编号,规格,sum(数量) as 已生产 from sc group by  编号,规格 ", cn, adOpenStatic, adLockOptimistic
        If rs1.RecordCount > 0 Then
        Set MSHFlexGrid1.DataSource = rs1
    Else
         Exit Sub
    End If
   '///////////////////////////
   Set rs2 = New ADODB.Recordset
        rs2.Open "select 编号,sum(数量) as 已包装 from bz group by  编号 ", cn, adOpenStatic, adLockOptimistic
        If rs2.RecordCount > 0 Then
        Set MSHFlexGrid2.DataSource = rs2
    Else
         Exit Sub
    End If
    '///////////////////////////
    Set rs3 = New ADODB.Recordset
        rs3.Open "select sc.编号,sc.规格,sum(sc.数量) as 已生产, sum(bz.数量) as 已包装 from sc left join bz on sc.编号=bz.编号 group by sc.编号,sc.规格 ", cn, adOpenStatic, adLockOptimistic
        If rs3.RecordCount > 0 Then
        Set MSHFlexGrid3.DataSource = rs3
    Else
         Exit Sub
    End If
  
  
    rs1.Close
    rs2.Close
    rs3.Close
    cn.Close
    Set rs1 = Nothing
    Set rs2 = Nothing
    Set rs3 = Nothing
    Set cn = Nothing

End Sub


[此贴子已经被作者于2020-8-10 20:36编辑过]

搜索更多相关主题的帖子: Set SUM 编号 ADODB If 
2020-07-28 20:37
xxwyyf007
Rank: 2
等 级:论坛游民
帖 子:24
专家分:14
注 册:2016-4-26
得分:0 
改为如下,报错:
        rs3.Open "select a.编号,a.规格,a.数量 as 已生产,b.数量 as 已包装 from  (select 编号,规格,sum(数量) from sc group by 编号,规格 ) a left join (select 编号,sum(数量) from bz group by 编号 ) b on a.编号=b.编号  ", cn, adOpenStatic, adLockOptimistic



版主,在不,能否帮个忙啊.
2020-08-11 21:45
xxwyyf007
Rank: 2
等 级:论坛游民
帖 子:24
专家分:14
注 册:2016-4-26
得分:0 
哪位坛友能否帮一下,崩溃中...

[此贴子已经被作者于2020-8-11 21:50编辑过]

2020-08-11 21:49
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
SELECT c1.编号, c1.规格, c1.已生产, b1.已包装 FROM (SELECT BZ.编号, Sum(BZ.数量) AS 已包装 FROM BZ GROUP BY BZ.编号)  AS b1 INNER JOIN (SELECT SC.编号, SC.规格, Sum(SC.数量) AS 已生产 FROM SC GROUP BY SC.编号, SC.规格 )  AS c1 ON b1.编号 = c1.编号;

SQL命令在 ACCSEE 2007 中测试通过。
你的问题出在 ,已生产 和已包装 在原表中是不存在的,只存在于查询后的表,那么你连接二个表,也只能连接二个查询出来的表。
收到的鲜花
  • xxwyyf0072020-08-12 20:07 送鲜花  1朵   附言:感谢!!!

授人于鱼,不如授人于渔
早已停用QQ了
2020-08-11 22:31
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
如果能把 查询1和查询2 直接做到 MDB 中去,那么 连接部分就不需要写这么复杂,直接写二个查询名就行,数据引擎发现是查询后,会自动查询生成临时表,然后再继续下一步的操作。
这样的SQL命令就比较简洁,更容易看懂。也就说查询可以当表使用 。
收到的鲜花
  • xxwyyf0072020-08-12 20:08 送鲜花  5朵   附言:感谢!!!

授人于鱼,不如授人于渔
早已停用QQ了
2020-08-11 22:34
cwa9958
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:67
帖 子:247
专家分:1228
注 册:2006-6-25
得分:0 
这么复杂的sql语句,看的头都晕了。
既然用vb了,可以用vb语句来处理rs1,rs2的结果。可能用vb的代码会很多,但是好理解,不会出错。
收到的鲜花
  • xxwyyf0072020-08-12 20:09 送鲜花  2朵   附言:感谢!!!
2020-08-12 10:06
xxwyyf007
Rank: 2
等 级:论坛游民
帖 子:24
专家分:14
注 册:2016-4-26
得分:0 
以下是引用风吹过b在2020-8-11 22:34:20的发言:

如果能把 查询1和查询2 直接做到 MDB 中去,那么 连接部分就不需要写这么复杂,直接写二个查询名就行,数据引擎发现是查询后,会自动查询生成临时表,然后再继续下一步的操作。
这样的SQL命令就比较简洁,更容易看懂。也就说查询可以当表使用 。

谢谢版主,这个问题已解决了。
另外,这里用left join,right join,inner join 都行,但用full join就不行,不知为何?
若把RS1,RS2做到MDB中去,方便以这个为例演示一下不?或本坛有类似帖子的链接否?

[此贴子已经被作者于2020-8-12 20:28编辑过]

2020-08-12 20:05
xxwyyf007
Rank: 2
等 级:论坛游民
帖 子:24
专家分:14
注 册:2016-4-26
得分:0 
以下是引用cwa9958在2020-8-12 10:06:44的发言:

这么复杂的sql语句,看的头都晕了。
既然用vb了,可以用vb语句来处理rs1,rs2的结果。可能用vb的代码会很多,但是好理解,不会出错。

感谢版主的关注,方便以此为例演示一下不?或本坛有类似帖子的链接否?再次感谢!!!
2020-08-12 20:06
xxwyyf007
Rank: 2
等 级:论坛游民
帖 子:24
专家分:14
注 册:2016-4-26
得分:0 
花送的多少,别介意!我不懂瞎点的,就表示一下心情
2020-08-12 20:10
风吹过b
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:364
帖 子:4912
专家分:29900
注 册:2008-10-15
得分:0 
回复 7楼 xxwyyf007
就是在 MDB 里新建 查询 ,然后保存。
后面的查询,可以在这个 保存的查询的基础上再查询。

新建二个查询 ,第一个,保存为 c1
命令:SELECT SC.编号, SC.规格, Sum(SC.数量) AS 已生产 FROM SC GROUP BY SC.编号, SC.规格;
第二个,保存为 b1
命令:SELECT BZ.编号, Sum(BZ.数量) AS 已包装 FROM BZ GROUP BY BZ.编号;

------------------
那你程序里的查询命令就直接可以是:
SELECT c1.编号, c1.规格, c1.已生产, b1.已包装 FROM  b1 INNER JOIN c1 ON b1.编号 = c1.编号;

============
我昨天测试时,就是先这样做的,然后再把这个SQL命令使用上面查询进行扩展的。


授人于鱼,不如授人于渔
早已停用QQ了
2020-08-12 20:26



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-502661-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.206913 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved