会员登录 - 用户注册 - 网站地图 Office中国(office-cn.net),专业Office论坛
当前位置:主页 > 技巧 > Access技巧 > 模块函数VBA > 正文

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

时间:2014-11-17 13:06 来源:access911.net 作者:海里先生… 阅读:

关于 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 环境

以下是 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

(责任编辑:admin)

顶一下
(0)
0%
踩一下
(0)
0%
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价: