Office中国论坛/Access中国论坛

标题: 上一个案例的请教细节 [打印本页]

作者: LarryVan    时间: 2012-8-7 23:30
标题: 上一个案例的请教细节
之前请教的案例,感谢大家回答,但是还是不怎么懂,再来继续请教。之前的问题
http://www.office-cn.net/thread-113899-1-1.html

虽然实际数据比较复杂,但是先问一些简化的问题。

2011年数据如下:[attach]50103[/attach]

2012年数据如下:[attach]50102[/attach]

想达到的效果:
做一个查询窗体,输入公司代码就可以查询到与该公司相关的内容,包括个产品今年的销量,去年的销量,增长率以及对应增长率会给到该公司的奖励额度等等,希望斑竹或者其他大虾能看看页首给的链接,了解一下然后指教在下如何实现。

1.在查询中怎么输入筛选条件,格式是怎么样的?
2.怎么做到查询窗体,输入一个公司的代码怎么才能链接到该公司的信息?
3.该公司的部分信息已经存在于表格中,但是很大一部分需要更具相应条件进行计算,应该要用到函数和循环等。

希望给位给到的内容不仅仅是一个结果或者已经设计好的数据库,希望能让我看到源代码,以及设计过程,这样我也可以好好学习一下怎么去做一个数据库。


PS: 顺路求一个资源, 哪位有一个完整案例的设计全过程(动画或者视频)资源,求链接。

非常感谢各位。



作者: zhuyiwen    时间: 2012-8-8 09:06
很高兴能看到你将这样问题用Access来解决。

首先,我们来看一下你的数据表结构:
Code、Company、Products、Volumn
我估计Code是Company的代码,那么表中有用的数据列就只有三个了,但为后面的统计方面,建议加入时间系列,在这里为年度 Y,那么得到新的表结构如下:
Y、Company、Products、Volumn
以你的示例数据,我们在Access 2010中新一个数据表 Sales , 为了提高运算速度,分别将 Y、Company、Products设置索引为“有(有重复)”

[attach]50104[/attach]

其中 ID,是系统自动分配的主键,无实际意义

将数据导入,可以看到数据如下:

[attach]50105[/attach]

然后,我们可以选择查询从这个表中分别得到各年的销售数据,比如获得2012年的数据q2012,创建查询如下:
[attach]50106[/attach]  [attach]50107[/attach]

其SQL语句如下:
  1. SELECT Sales.[Y], Sales.[Company], Sales.[Products], Sales.[Volumn]
  2. FROM Sales
  3. WHERE (((Sales.[Y])=2012));
复制代码
同样的方法,我们可以得到2011年的数据q2011,其SQL语句如下
  1. SELECT Sales.[Y], Sales.[Company], Sales.[Products], Sales.[Volumn]
  2. FROM Sales
  3. WHERE (((Sales.[Y])=2011));
复制代码
现在,我们再求取增长率,增长率的计算公式:(2012的Volumn - 2011的Volumn) / 2011的Volumn
同样我们可以用查询来得到,设计查询如下:

[attach]50110[/attach]

[attach]50109[/attach]

至于如何操作方便,你就自己去动脑筋吧。

作者: LarryVan    时间: 2012-8-8 10:30
zhuyiwen 发表于 2012-8-8 09:06
很高兴能看到你将这样问题用Access来解决。

首先,我们来看一下你的数据表结构:

非常感谢您的细心指导,初学Access 已经感受到Access的强大,同时也学得不到位,今后还会继续向大家学习access并应用access。

但是您这一块可能是在查询里面进行筛选。我其实想做到的是下面的内容

2011年的数据如下:
[attach]50111[/attach]

2012年的销量如下:
[attach]50112[/attach]

就是说是分不同季度的销量,然后算增长率的时候是按对应季度去进行计算的。

其次, 我希望计算每个company代理的所有产品,比如A公司代理的y和v产品的所有季度的总量,如果大于150就合格(也就是有资格参加下一年度的优惠活动) ,比如2011年E公司总量超过了150,那就能参加2012年的优惠。细则如下:

按季度计算增长率,得到增长率之后按不同产品有不同的折扣率:

比如对于X产品有:增长率120%~130% 折扣15%;130%~140%折扣18%,140%~150%的折扣为20%等等

最后再算一个优惠量=当年当季度销量(比如2012 2Q)* (对应折扣)  

计算优惠量的时候有上限:增长率超过150%以上的不计入活动。(所以还要设置一个条件)

最后我要得到的东西如下:

[attach]50114[/attach]

[attach]50113[/attach]

我输入B公司的代码234(手动输入),然后选择季度和产品,对应的季度对应产品的销量等等数据能自动连接并计算得到窗体包含的所有结果。(计算之前应该进行合格性计算。如上所述,此时如果合格就按上面提到的规则计算,如果不合格即显示不合格并且其他列数据显示为“-”),2012年合格性的计算要保存到一个新的表中以备查询所用。

同时希望能有一个模糊查询,比如A公司的全称其实是Amstrong,那在company那里输入Am...等也能查询到公司对应的内容。


如下图所示:


再次表示感谢,论坛上其他大牛有好方法也希望能不吝赐教,小弟在此一并谢过。

作者: LarryVan    时间: 2012-8-8 10:31
[attach]50116[/attach]

以上是按company进行模糊查询的窗体示例。

作者: zhuyiwen    时间: 2012-8-8 18:24
查询的实质还是SQL语句,如果你在窗体中实现的话,无非是想办法构造符合条件的SQL语句作为数据表窗体的数据源。
如果是按你的窗体来求某公司单一商品的结果,大可不必如此麻烦,你只要会用DLookup函数就能达到你的目的。
作者: LarryVan    时间: 2012-8-8 19:28
zhuyiwen 发表于 2012-8-8 18:24
查询的实质还是SQL语句,如果你在窗体中实现的话,无非是想办法构造符合条件的SQL语句作为数据表窗体的数据 ...

谢谢您的细心回答。我刚学不久,很多东西还不熟练,我觉得按我的描述应该蛮多事情要做的,SQL可能不完全能解决。

我还想请教老师一个问题:假如我现在3个表(由excel导入),我做好了数据库,其中包含很多查询和窗体等等。但是我这三个表中的数据每个月都需要更新一次(Excel里面更新),那我怎么做到尽量省事的每个月去更新数据。

先谢谢老师!
作者: zhuyiwen    时间: 2012-8-9 01:07
看你前面的帖子,表中没有时间序列,当然不好办,如果像我前面说的那样,增加一个时间序列,每月数据按时间序列追加到表中,你的问题不就解决了?
作者: LarryVan    时间: 2012-8-9 21:29
zhuyiwen 发表于 2012-8-9 01:07
看你前面的帖子,表中没有时间序列,当然不好办,如果像我前面说的那样,增加一个时间序列,每月数据按时间 ...

谢谢老师,这的确是个好办法




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