首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

怎么对一个动态查询结果记录集进行合计

2012-01-20 
如何对一个动态查询结果记录集进行合计VB+ACSSES有两个以下表表1、商品资料表(各商品条码是唯一的)条码商品

如何对一个动态查询结果记录集进行合计
VB+ACSSES

有两个以下表

表1、商品资料表(各商品条码是唯一的)
  条码 商品名称 商品助记码 商品分类 。。。
 69125365622 康师傅牛肉面 KSFNRM 食品类
 69125365555 康师傅鸡蛋面 KSFJDM 食品类
 69456222411 矿泉水 KQS 饮料类
  。。。

表2 销售明细表

  销售单流水号 条码 销售数量 零售额  
  1001120001 69125365622 2 10
  1001120001 69253562211 1 7
  。。。


现在在一个窗体的DATAGRID表格控件中显示销售明细
SQL语名如下:
SELECT a.条码,b.商品名称,a.销售数量,a.零售额,b.商品助记码,b.商品分类,left(a.销售单流水号,6) as 日期 
from 销售明细表 a,商品资料表 b where a.条码=b.条码 order by a.条码,a.销售单流水号

窗体中还提供了对‘商品名称’‘商品助记码’‘条码’‘日期’的模糊查询功能,是通过Filter实现的
如查询某月康师傅牌子的商品销售明细

RS.filter="商品名称 like '*" & Text1.text & "*' and 日期>=" & text2.text & "and 日期<=" & text3.text

以上的各种功能都能实现了

以上只是说明一下我的程序的思路好让大侠们明白我的以下问题,实际代码不是这样

现在的问题是无法对这种查询结果进行合计(SUM(销售数量),sum(零售额))

我用以下SQL语句在ACSSES环境里可以正确返回结果,但在VB中返回不了结果

"SELECT sum(销售数量) as totalSL,sum(零售额) as totalLSE from 
(SELECT a.条码,b.商品名称,a.销售数量,a.零售额,b.商品助记码,b.商品分类,left(a.销售单流水号,6) as 日期 
from 销售明细表 a,商品资料表 b where a.条码=b.条码 order by a.条码,a.销售单流水号)
 where 商品名称 like '*" & Text1.text & "*' and 日期>=" & text2.text & "and 日期<=" & text3.text



请高手们看看有没有更好的方法,指点一下,(以上SQL语句未必准确,只是我当前的实现方法)

[解决办法]
ss = "SELECT sum(销售数量) as totalSL,sum(零售额) as totalLSE from " & _
"(SELECT a.条码,b.商品名称,a.销售数量,a.零售额,b.商品助记码,b.商品分类,left(a.销售单流水号,6) as 日期 " & _
"from 销售明细表 a,商品资料表 b " & _
"where a.条码=b.条码 " & _
"and b.商品名称 like '*" & Text1.Text & "*' " & _
"and 日期>=#" & text2.Text & "# and 日期 <=#" & text3.Text & "#)as AA"

要加上这个sum值,用union [all] 具体用法,你看access的帮助吧
[解决办法]
子查询要加别名、不用 Order By、用标准的 Join 语法进行连接
"SELECT sum(销售数量) as totalSL,sum(零售额) as totalLSE from" & _
" (SELECT a.条码,b.商品名称,a.销售数量,a.零售额," & _
" b.商品助记码,b.商品分类,left(a.销售单流水号,6) as 日期" & _
" from 销售明细表 a" & _
" join 商品资料表 b on a.条码=b.条码) as T" & _
" where 商品名称 like '*" & Text1.text & "*'" & _
" and 日期>=#" & text2.text & "#" & _
" and 日期<=#" & text3.text & "#"

[解决办法]
问题的根本原因是你的数值型字段里有NULL
这样会导致任何运算结果出来的都是NULL

解决方法有两个
1:将表里该字段的默认值设为0,然后对数据做一下update 
如update 表 set 字段1=0 where 字段1 is null
2:在sql语句里处理,把null处理为0

如Select sum(iif(isnull(字段1),0,字段1)) as sum1 from..

热点排行