Access911.net   |   a9BBS   |   OTaA System  
  搜索文章:  
Access911欢迎您光临  
   主页      上传      繁體版       论坛     
设为首页  |  加入收藏   
  
你现在的位置:文章索引 -> 文章分类 -> 函数  
 首页|  近日更新|  下载  |  文章索引  |  搜索|  术语|  承接工程|  
 
系统正在加载内容,请耐心等待...
 
 查询
 窗体
 报表
 
 
 VBA
 函数
 ADO/DAO/ADO.NET
 API
 ADP
 安全
 发布
 OA
 ASP/ASP.NET
 其他语言
 控件
 DELPHI
 C#/.Net
 本站
 其他
 小例程
 常用软件
 参考文档
 业主作品
 网友大作
 
 
友情链接
 access911.net
 
访问人次
 1702086
 
站长 E-Mail
 net911@sina.com
 access911@gmail.com
 
RSS 订阅

显示附加信息 >>>

关于 Partition 函数在分组查询中的应用

作者:海里先生(cg1重写版)  摘自:access911.net  :cg1  更新日期:2005-8-25  浏览人次:

 

关于 Partition 函数在分组查询中的应用《函数》

看到很多朋友在Access进行分组统计查询时,常常用嵌套多层IIF函数来得到分组区间标志,如设表A有Age这样一个字段,一般朋友会采用如下的查询语句:
Select
IIf(Age<30,"0:29",IIf(Age<40,"30:39",IIf(Age<50,"40:49",IIf(Age<60,"50:59",IIf(Age<70,"60:69","70:  "))))) As Range,
Count (1) As Count
From 表A
Group By
IIf(Age<30,"0:29",IIf(Age<40,"30:39",IIf(Age<50,"40:49",IIf(Age<60,"50:59",IIf(Age<70,"60:69","70:  ")))))


不但语句冗长,而且由于多层IIF函数嵌套,极易出错。另外如果分组区间进一步细化,更加多层嵌套的IIF函数会让人有“乱花渐欲迷人眼”的感觉,出错的概率进一步增大。
现在我们用 Partition 函数重写一下:
Select Partition(Age,0,69,10) As Range, Count(Age) As Count From表A Group By Partition(Age,0,69,10)


代码相对简单很多,不过上述函数只适用于纯 ACCESS 环境

    新手来看:Access的特点、概念。什么是纯 ACCESS 环境?《其他》
    http://access911.net/index.asp?u1=a&u2=79FAB51E12DC


以下是 Partition 的帮助

Partition 函数

 

返回一个 Variant (String),指定一个范围,在一系列计算的范围中指定的数字出现在这个范围内。

语法

Partition(number, start, stop, interval)

Partition 函数的语法含有下面这些命名参数

部分 描述
number 必要参数。整数,在所有范围中判断这个整数是否出现。
start 必要参数。整数,数值范围的开始值,这个数值不能小于 0。
stop 必要参数。整数,数值范围的结束值,这个数值不能等于或小于 start

说明

Partition 函数会标识 number 值出现的特定范围,并返回一个 Variant (String) 来描述这个范围。Partition 函数在查询中是最有用的。可以创建一个选择查询显示有多少定单落在几个变化的范围内,例如,定单数从 1 到 1000、1001 到 2000,以此类推。

下面的表格使用三组 startstop 以及 interval 部分,来显示怎样决定这个范围。第一个范围和最后一个范围两列显示 Partition 的返回值,此范围的低端 (lowervalue) 和高端 (uppervalue) 是以冒号分开的。

start stop interval 第一个范围之前 第一个范围 最后一个范围 最后一个范围之后
0 99 5 " :-1" " 0: 4" " 95: 99" " 100: "
20 199 10 " : 19" " 20: 29" " 190: 199" " 200: "
100 1010 20 " : 99" " 100: 119" " 1000: 1010" " 1011: "

从上面的表格中得知,在第三行中,由 startstop 所定义的数值范围不能以 interval 来均分。所以,即使 interval 是 20,最后一个范围也只能扩展到stop(11 个数)。

如果需要的话,Partition 会在返回的范围中加上足够的空白,以便让返回值在冒号的左右两侧有相同的字符数,其值就是 stop 中的字符数再加一。如此可确保当要使用 Partition 与其它的数值作运算时,所得的字符串,可以在之后的排序操作中得到正确的结果。

如果 interval 是 1,则范围便是 number:number,而不管 startstop 参数如何。比如说,如果 interval 是 1,number 是 100,而 stop 是 1000,则 Partition 会返回 " 100: 100"。

如果任何部分是 Null,则 Partition 会返回一个 Null

 

 
相关文章
     没有手动相关文章
 
评论
     查看或发表更多的评论,请单击这里。
 
 
 
 
 
   
  Access911.net   |   a9BBS   |   OTaA System   |
建站日期:2000年4月2日  |  设计施工:陈格 ( access911 & cg1 )
 Copyright © 2000 - 2003 COMET, 陈格 保留所有权利