这样的查询居然也不能正确查询:
select iif(a.[gl_quantity] is null,0,a.[gl_quantity]) as [quantity0]
,(select sum(b.[rd_quantity])
   from [goods_receive_list] as l, [goods_receive_detailed] as b
   where b.[gl_id]=a.[id] and b.[rl_id]=l.[id] and l.[rl_date]<=#2008-04-13 23:59:59#) as [quantity1]
,(select sum(b.[cd_quantity])
   from [goods_consignment_list] as l, [goods_consignment_detailed] as b
   where b.[gl_id]=a.[id] and b.[cl_id]=l.[id] and l.[cl_date]<=#2008-04-13 23:59:59#) as [quantity2]
 from [goods_list] as a where a.[id]=136
能查,但是只能取出没有聚合的那个列的值,另两个聚合函数的值却始终取不出来,一取就报错,而且居然提示无效的过程调用或参数
有没有高手能不能解释一下是什么原因?难道不能使用聚合函数?
怎么要写个这么简单的查询都不能实现?我把这三个数分开查就可以正常查出来,组合到一起就不行,真是奇怪,这个简单我可以分成三个查询,但我要查询几百几千种物品的信息和他们各自的库存数(要使用聚合函数查查收记录和发记录),不可能每行单独进行多次查询啊!请高手指点指点!

解决方案 »

  1.   

    要下班了,没细看,至少你的语句中(select......少了结束的)号
      

  2.   

    我现在把条件去掉了,可以看得更清楚些,语法没有错,我把数据表转化为SQL Server 2000就可以正常查询并统计出数据来,但是同样的这段代码在ACCESS中却无法查出聚合函数的值,在VB中使用段代码查询,当读取聚合函数列时提示无效过程调用,判断这一列也不为空,但无法取数!SELECT a.[id], a.[gl_pn], a.[gl_name_ch], a.[gl_name_en], a.[gl_unit], a.[gl_price], a.[gl_quantity],
              (SELECT SUM(rd.[rd_quantity])
             FROM [goods_receive_list] AS rl, [goods_receive_detailed] AS rd
             WHERE rd.[gl_id] = a.[id] AND rd.[rl_id] = rl.[id]) AS [quantity1],
              (SELECT SUM(cd.[cd_quantity])
             FROM [goods_consignment_list] AS cl, 
                   [goods_consignment_detailed] AS cd
             WHERE cd.[gl_id] = a.[id] AND cd.[cl_id] = cl.[id]) AS [quantity2]
          FROM [goods_list] AS a
          ORDER BY a.[gl_pn]
    在SQL Server 2000中查询结果
    ===================================================================================================
    1 340-PLS0134 文件板夹---(泰亦138) 个 3.6500 NULL 130.00 109.00
    2 340-PLS0135 文件盘(灰色三层) 个 14.7000 NULL 130.00 NULL
    3 340-PLS0136 文件盘--银色(三层) 个 25.5000 NULL 130.00 36.00
    4 340-PLS0137 文件盘--竖型(三格) 个 9.0000 NULL 120.00 80.00
    5 340-PLS0175 胶擦-磨砂 块 .7000 NULL 170.00 332.00
    6 340-TLS0006 剪刀 把 2.6000 NULL 130.00 23.00
    7 340-TLS0008 界刀---大(DS 803) 把 1.5000 NULL 130.00 3.00
    8 340-TLS0009 界刀---小(DS 804) 把 1.2000 NULL 50.00 NULL
    9 340-TLS0010 界刀片---大(DS 803) 片 .3000 NULL 50.00 NULL
      

  3.   

    问题解决了,数据类型用的是decimal,不知道为什么用这个类型不行,加了个val就可以了!