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语句未必准确,只是我当前的实现方法)

解决方案 »

  1.   

    我用以下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 在VB中,返回的totalsl,totalLSE 是NULL
      

  2.   

        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的帮助吧
      

  3.   

    子查询要加别名、不用 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 & "#"
      

  4.   

    问题的根本原因是你的数值型字段里有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..
      

  5.   

    子查询加了别名、不用了 Order By、用left Join 语法进行连接还是不得数值型字段里都有数值,没有NULL。
    只是在销售表中还有个[成本]字段,该字段有NULL,不过在第一个查询语句有处理掉了如下:
    SELECT a.条码,b.商品名称,a.销售数量,a.零售额,b.商品助记码,b.商品分类,left(a.销售单流水号,6) as 日期,iif(isnull(a.sumcost),0,a.sumcost) as 成本
    from 销售明细表 a,商品资料表 b where a.条码=b.条码 order by a.条码,a.销售单流水号当然在合计的SQL语句中也有这句,按理这样已经处理掉了,不会是这个有问题吧?因为数据量大了些所以不便手工处理NULL来尝试
     
      

  6.   

    把销售表中的NULL都换成0了,还是不得
      

  7.   


    把销售表中的NULL都换成0了,还是不得
      

  8.   

    使用VB+ACCESS时,Like条件中,把*替换成%看看。
      

  9.   

    SUM 结果为 NULL 应该是没有符合条件的记录。
    3 个 TextBox 的内容是什么?
      

  10.   


    是的,说的对。
    text1.text="康师傅",text2,text3均为有效日期值,且数据表中有疑或的是为什么在ACSSES环境里可以正确返回结果,但在VB中返回不了SUM结果
      

  11.   

    left(a.销售单流水号,6) as 日期
    也就是说 [日期] 其实是字符串格式,那么 where 子句中两边就应该加 ' 而不是 #。
    而且 Text2、Text3 的格式要和它保持一致,不能一边是 100205 一边是 2010-2-5。