Office中国论坛/Access中国论坛

标题: 关于查询某个产品最近几月份进库或者入库 [打印本页]

作者: williamwangc    时间: 2011-10-29 14:34
标题: 关于查询某个产品最近几月份进库或者入库
最近帮仓库做一个数据库。他希望知道最近几月份某个产品进库或者出库多少数量。现在数据已全部导入,我做了一个查询,可以找到最近出库或入库的月份,但无法将数量连接在后面。我的SQL代码如下:
  1. SELECT yy.品名, Max(yy.月份) AS [最近 月份]
  2. FROM yy
  3. GROUP BY yy.品名;
复制代码
当然以上的代码是可行的,但如果加入了yy.[数量]字段之后,就多出了多余的数据。
比如这样
品名  最近的月份  数量
aa       6                    2
aa       4                    1
bb       5                    3
bb       7                    5
其实我只要最近的aa的6月的数量,bb的7月的数量。
当然我在前面的[yy]查询已经限定了数量>0的条件,所以出现了这样的结果。
作者: roych    时间: 2011-10-29 19:28
1、多做一个查询。也就是在你给出的查询中,再建立一个数据源和该查询的内联接查询。假定一个你的查询是查询1,那么建立这么一个查询即可(大体语句是这样,我不习惯写语句,所以可能有误):
select 品名,月份,数量 From yy Inner Join 查询1 on 查询1.[最近 月份]=yy.月份
2、用DMax和Dlookup来完成。
select 品名,DMax("月份","yy","品名='"&[品名]&"'") As 最近月份,Dlookup("数量","yy","品名='"&[品名]&"' and 月份="&[最近月份])  As 数量 From yy Group by 品名,DMax("月份","yy","品名='"&[品名]&"'") ,Dlookup("数量","yy","品名='"&[品名]&"' and 月份="&[最近月份])
一般建议采用第一种方法。域函数计算时可能会因数据过多而导致运行较慢。
作者: williamwangc    时间: 2011-10-30 09:06
谢谢版主。其实我开始也是用方法一的方法。其实思路是对的,还要加一个限定条件的。
引用你的方法其实出现了即:
  1. select 品名,月份,数量 From yy Inner Join 查询1 on 查询1.[最近 月份]=yy.月份
复制代码
后出现了这样的不完全正确结果:
品名  数量   最近月份
aa       3             4
bb       3             1
aa       1             1
我想了下,理解了其实还要对品名进行内联的。所以实际的代码应为:
  1. SELECT yyyy.品名, yyyy.数量, xxxx.[最近 月份]
  2. FROM xxxx INNER JOIN yyyy ON (xxxx.品名 = yyyy.品名) AND (xxxx.[最近 月份] = yyyy.月份);
复制代码
PS.为了方便我把最近月份的查询改为了xxxx,经过限定的原始查询命名为yyyy
作者: roych    时间: 2011-10-30 10:30
第一个查询(即SELECT yy.品名, Max(yy.月份) AS [最近 月份] FROM yy GROUP BY yy.品名)的月份应该是唯一值的噢,如果yy里的月份也是唯一值的话,我写的查询是OK的。不过,如果不是的话,则需要内联接两个字段。
作者: williamwangc    时间: 2011-10-30 22:38
是的。你说的不错。问题是出在经过限定的原始查询,因为他不是唯一值。所以我又经过了一次品种的内联,终于达到了我要的效果。




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