设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: laomms
打印 上一主题 下一主题

[Access本身] access求和

[复制链接]
11#
 楼主| 发表于 2014-1-17 12:32:45 | 显示全部楼层
tzh1600 发表于 2014-1-17 14:11
那就存在一个问题,你是基于BILL还是基于ID的合计了,我看你示范表中ID与BILL的顺序是乱的,那就不能用ID ...

谢谢,基本上可以了。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
12#
 楼主| 发表于 2014-1-17 15:22:23 | 显示全部楼层
本帖最后由 laomms 于 2014-1-17 17:24 编辑

确实出现同一单号没有合并金额的毛病,这样得出的结构是错误的,不是每单总金额的合计,而是每一单子项的合计是5000,是不是得先生成一次临时表。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
13#
 楼主| 发表于 2014-1-17 17:57:18 | 显示全部楼层
tzh1600 发表于 2014-1-17 18:51
不用,建立一个汇总查询做为数据源即可,原来的ID改用BILL

做了汇总查询后(比如:sql2),里面的子项都是已经是按单号排序的汇总后的数据了,但是具体如何引进汇总后的数据,我直接用sql2替代原始的costmer表出错。
14#
 楼主| 发表于 2014-1-17 20:13:32 | 显示全部楼层
本帖最后由 laomms 于 2014-1-17 22:25 编辑



数据库中的144这两单其实是一单,金额是按单号分的,所以144的这单的金额实际是1200. 而且只能做为三单中的其中一单,所以统计前得先按单号汇总一下金额才能做为初步的数据。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
15#
 楼主| 发表于 2014-1-18 09:19:13 | 显示全部楼层
本帖最后由 laomms 于 2014-1-18 12:15 编辑

汇总的问题还是解决不了!
目前用新建表然后删除的方法:
sql1 = "select BILL, strName, sum(amount) as 金额, IFPAID from [Costmer] where IFPAID like 'NotPaid' group by strName,BILL"
sql = " SELECT BILL,strName,金额,  IFPAID  INTO Costmer_bake FROM (" & sql1 & ")"
cnn.Execute (sql)
然后从新表Costmer_bake中选择数据
...


用完后删除
    sql = "DROP TABLE " & "Costmer_bake"
    cnn.Execute (sql)


但是数据库大小都会增的很大,每次得压缩一次。



16#
 楼主| 发表于 2014-1-22 09:52:57 | 显示全部楼层
tzh1600 发表于 2014-1-21 12:38
看双数连续查询和三数连续查询,ACCESS建立查询就可以,不要建新表

非常感谢tzh1600的帮助,但是我是想要在那个合计查询之前先汇总一下,然后再列出所有的三单记录。
我现在用新建表,然后删除的方法,不知道有没有其他办法。

  1. Private Sub CommandButton1_Click()
  2. Sheet1.Range("A1:L100").ClearContents
  3. Dim sql1, sql2, sql
  4. Dim sum, sName
  5. cnn.Open "Provider=Microsoft.Jet.Oledb.4.0;data Source=" & ThisWorkbook.Path & "\data.MDB "
  6. sql1 = "select 销售清单号,公司名称,sum(销售金额) as 金额, 付款情况 from [XSD] where 付款情况 like 'NotPaid' group by 公司名称,销售清单号,付款情况"
  7. sql = " SELECT 销售清单号,公司名称,金额,付款情况 INTO XSD_bake FROM (" & sql1 & ")"
  8. cnn.Execute (sql)
  9. sql = "SELECT XSD_bake.公司名称, XSD_bake.金额, A.金额, B.金额, C.金额, XSD_bake.金额 + A.金额+ B.金额+ C.金额 AS hj, XSD_bake.销售清单号, A.销售清单号, B.销售清单号, C.销售清单号, XSD_bake.付款情况 FROM ((XSD_bake INNER JOIN XSD_bake AS A ON XSD_bake.公司名称 = A.公司名称) INNER JOIN XSD_bake AS B ON A.公司名称 = B.公司名称) INNER JOIN XSD_bake AS C ON B.公司名称 = C.公司名称 WHERE (XSD_bake.金额 + A.金额 + B.金额+ C.金额 = 6000) And (A.销售清单号 > XSD_bake.销售清单号) And (B.销售清单号 > A.销售清单号) And (C.销售清单号 > B.销售清单号)  ORDER BY XSD_bake.公司名称, XSD_bake.销售清单号;"
  10. rst.Open sql, cnn, adOpenKeyset, adLockOptimistic
  11.     If rst.EOF = False Then
  12.         For i = 1 To rst.RecordCount
  13.               Sheet1.Cells(i, 1) = rst.Fields(0).Value
  14.               Sheet1.Cells(i, 2) = rst.Fields(1).Value
  15.               Sheet1.Cells(i, 3) = rst.Fields(2).Value
  16.               Sheet1.Cells(i, 4) = rst.Fields(3).Value
  17.               Sheet1.Cells(i, 5) = rst.Fields(4).Value
  18.               Sheet1.Cells(i, 6) = rst.Fields(5).Value
  19.               Sheet1.Cells(i, 7) = rst.Fields(6).Value
  20.               Sheet1.Cells(i, 8) = rst.Fields(7).Value
  21.               Sheet1.Cells(i, 9) = rst.Fields(8).Value
  22.               Sheet1.Cells(i, 10) = rst.Fields(9).Value
  23.               Sheet1.Cells(i, 11) = rst.Fields(10).Value
  24.           rst.MoveNext
  25.       Next i
  26.   End If
  27.   rst.Close: Set rst = Nothing
  28.   sql = "DROP TABLE " & "XSD_bake"
  29.   cnn.Execute (sql)
  30.   cnn.Close: Set cnn = Nothing
  31. End Sub
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
17#
 楼主| 发表于 2014-1-23 09:13:18 | 显示全部楼层
如果可以的话把37楼附件里的代码改下,改成不用在access中新建表的方法。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-6-7 07:01 , Processed in 0.119444 second(s), 30 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表