Office中国论坛/Access中国论坛

标题: 子查询可以有where语句吗? [打印本页]

作者: olive_fy    时间: 2009-1-6 10:05
标题: 子查询可以有where语句吗?
我在用子查询的时候,在子查询中加入where语句,总是报错?
怎么回事呢?
SELECT TabPN.PN, Sum(nz(TabBaseFS.[Q-OK],0)) AS 领料小计, Sum(nz(TabBaseFS.[Q-SC],0)) AS 报废小计
FROM (((TabPN LEFT JOIN TabBaseFG ON TabPN.PN = TabBaseFG.PN) LEFT JOIN TabBaseDGH ON TabPN.PN = TabBaseDGH.PN) LEFT JOIN TabWIPFS ON TabPN.PN = TabWIPFS.PN) LEFT JOIN TabBaseFS ON TabPN.PN = TabBaseFS.PN
WHERE (((TabPN.Dep)="锻压车间") AND ((TabPN.Sta)<>"停产"))
GROUP BY TabPN.PN;

在上面的黑体字中,如果加入where语句 Sum(nz(TabBaseFS.[Q-OK],0)) AS 领料小计 where ([date]=format(now(),"yyyymm")
那么就报错"select字句中包含一个保留字,拼写错误或丢失的参数,或标点符号不正确."

作者: andymark    时间: 2009-1-6 10:19
子查询可以用WHERE
作者: Henry D. Sy    时间: 2009-1-6 10:23
子查询也是查询,是查询就可以有where子句
作者: Henry D. Sy    时间: 2009-1-6 10:25
就是不要用access保留字(关键字)作为字段名,比如本例中的date,
请将它更改为myDate试试。
作者: olive_fy    时间: 2009-1-6 12:30
原帖由 Henry D. Sy 于 2009-1-6 10:25 发表
就是不要用access保留字(关键字)作为字段名,比如本例中的date,
请将它更改为myDate试试。


版主,我换了关键字还是不行啊,同样的提示.

Sum(nz(TabBaseFS.[Q-OK],0)) AS 领料小计 where(TabBaseFS.pro="领料")

是不是哪个地方的格式不对啊.
作者: Henry D. Sy    时间: 2009-1-6 13:53
把例子传上来看看
作者: olive_fy    时间: 2009-1-6 15:35
附件是简化的数据库文件.有4个表,
TabWIPFS是期初库存表,PN是产品编号,Q-ok是数量
TabBaseFS是生产数据,PN是产品编号,Q-ok是数量,Q-sc是报废数量,pro是工序
TabBaseFG是成品库数据表,PN是产品编号,Q-ok是数量,pro是工序
TabPN是产品信息表
现在我是做了几个查询做出来的.
我需要用一个查询就动态算出每个产品的当前结存数量,计算公式是:期初库存+领料数量-入库数量-报废数量
可是子查询怎么也弄不好,麻烦各位老大了.
作者: Henry D. Sy    时间: 2009-1-6 15:47
想一步到位比较麻烦
作者: Henry D. Sy    时间: 2009-1-6 15:50
期初库存+领料数量-入库数量-报废数量
???
作者: olive_fy    时间: 2009-1-6 15:58
原帖由 Henry D. Sy 于 2009-1-6 15:50 发表
期初库存+领料数量-入库数量-报废数量
???


期初库存在期初库存表里面,同一个产品有几个区段,只要把这几段加起来就是这个产品的期初库存

因为查询窗口中要有起至日期和截至日期,因此,最好放一个查询表里,便于日期更新.
作者: Henry D. Sy    时间: 2009-1-6 16:02
SELECT A.PN, A.原库存, C.进库, B.领料, B.领料报废, C.进料报废, [原库存]+Nz([进库],0)-Nz([领料],0)-Nz([领料报废],0)-Nz([进料报废],0) AS 库存
FROM ([SELECT TabWIPFS.PN, Sum(TabWIPFS.[Q-ok]) AS 原库存
FROM TabWIPFS
GROUP BY TabWIPFS.PN]. AS A LEFT JOIN [SELECT TabBaseFS.PN, Sum(TabBaseFS.[Q-OK]) AS 领料, Sum(TabBaseFS.[Q-SC]) AS 领料报废
FROM TabBaseFS
GROUP BY TabBaseFS.PN]. AS B ON A.PN = B.PN) LEFT JOIN [SELECT TabBaseFG.PN, Sum(TabBaseFG.[Q-OK]) AS 进库, Sum(TabBaseFG.[Q-SC]) AS 进料报废
FROM TabBaseFG
GROUP BY TabBaseFG.PN
]. AS C ON A.PN = C.PN;
作者: olive_fy    时间: 2009-1-6 16:18
版主,领料和进库那里还要加条件,where(TabBaseFS.pro="领料'),where(TabBaseFg.pro="入库'),我加条件时老是出错.
另外,好像Tabpn这个产品信息表没有用上.这个表里的产品编号是最全的,我想本月没有数据的也列出来,以0表示.

版主能不能做好样子,传上来?

不胜感激!

[ 本帖最后由 olive_fy 于 2009-1-6 16:24 编辑 ]




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3