使用聚合函数查ACCESS数据库

犀山居士 2008-04-13 04:25:13
这样的查询居然也不能正确查询:
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

能查,但是只能取出没有聚合的那个列的值,另两个聚合函数的值却始终取不出来,一取就报错,而且居然提示无效的过程调用或参数
有没有高手能不能解释一下是什么原因?难道不能使用聚合函数?
怎么要写个这么简单的查询都不能实现?

我把这三个数分开查就可以正常查出来,组合到一起就不行,真是奇怪,这个简单我可以分成三个查询,但我要查询几百几千种物品的信息和他们各自的库存数(要使用聚合函数查查收记录和发记录),不可能每行单独进行多次查询啊!请高手指点指点!
...全文
218 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
犀山居士 2008-04-13
  • 打赏
  • 举报
回复
问题解决了,数据类型用的是decimal,不知道为什么用这个类型不行,加了个val就可以了!
犀山居士 2008-04-13
  • 打赏
  • 举报
回复
我现在把条件去掉了,可以看得更清楚些,语法没有错,我把数据表转化为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
vbman2003 2008-04-13
  • 打赏
  • 举报
回复
要下班了,没细看,至少你的语句中(select......少了结束的)号

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧