Access开发培训
网站公告
·Access专家课堂QQ群号:151711184    ·Access快速开发平台下载地址及教程    ·欢迎加入Access专家课堂微信群!    ·如何快速搜索本站文章|示例|资料    
您的位置: 首页 > 技术文章 > Access数据库-教程

【Access小品】两个联接问题的处理

时 间:2015-07-28 17:33:33
作 者:煮江品茶   ID:10802  城市:武汉
摘 要:【Access小品】两个联接问题的处理
正 文:

  前日里为一版友解决中位数问题,曾写《入乡随俗》一文,在该文中对中位数采用自定义函数方式处理。这种方法存在一个问题,就是当Access做后台时,其中的查询如果调用自定义函数的话,那么数据是无法在前台读出来的。究其原因大概是Access不像SQL SERVER可以提供数据库服务,它不能自动运行后台的程序和自定义函数。由于这样的一个原因,就需要采用SQL语句来直接编写后台的查询,以便前台的调用。

  中位数是指一组数据由小到大排序后,如果记录条数为奇数则取其中间位置的数据,如果为偶数则取中间两数的平均数。编写中位数查询还是有一些难度的,其难度有二:其一是如何统一记录条数为奇数和偶数的算法,也就是一个算式要同时满足两种情况的运算;其二是如何进行高效率的运算。

  为了简化中位数查询的SQL语句,我们可以先编写一个“编号查询”。这个查询中我们解决两个问题,其一是对记录按照分组编出序号;其二是我们设计两个中位数位置。如果记录条数为偶数,比如6条记录,那么有两个中位数分别处于3和4。问题在于当记录条数为奇数时,比如7条记录,中位数处于4,只有一个中位数位置。为了统一中位数算法,我们可以将奇数条数的中位数也看成有两个,也就是两条处于4位置的记录。这样的话,我们就都可以用两条记录的平均数来计算中位数了。为了求出位置一,我们利用了Access中逻辑值的特性(0,-1),这是一个常用的奇巧的算法。由此我们为解决中位数计算的第一个难题做好了准备。

  关于第二个难题是计算效率问题,中位数的处理我们可以有多种方法。其中比较容易想到的是在字段上编写子查询或用域函数,但这样的处理运算速度非常慢。比较好的处理时采用联接的方式编写。由此我们可以编写“中位数查询”,在这个查询中,我们用一个分组查询与两个“编号查询”联接,这样就得到了计算中位数的两个值,将这两个值平均一下,也就得到了对应的中位数了。


  另外一个关于联接的问题也有点意思。有一个版友给了这样一组数据:

县市           乡镇
衡阳县        湖南张家界市
临湘市        湖南省岳阳地区岳阳市
湘潭县        湖南衡阳县西渡镇
岳阳市        中国湖南湘潭县易俗河镇

  其希望处理后得到如下结果:

县市           乡镇
岳阳市        湖南省岳阳地区岳阳市
衡阳县        湖南衡阳县西渡镇
湘潭县        中国湖南湘潭县易俗河镇

  这个问题看起来复杂,其实如果用联接的方式处理也十分简单,这个查询中的关键部分在于ON子句的写法,这个写法采用的是逻辑表达式,而不是关系表达式。关于这个问题,可以参见《三层功夫》中的论述。


示例:点击下载此附件


视图:



Access软件网官方交流QQ群 (群号:54525238)       Access源码网店

常见问答:

技术分类:

相关资源:

专栏作家

关于我们 | 服务条款 | 在线投稿 | 友情链接 | 网站统计 | 网站帮助