關于 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?uec=bg&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,以此類推。
下面的表格使用三組 start,stop 以及 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: " |
從上面的表格中得知,在第三行中,由 start 和 stop 所定義的數值范圍不能以 interval 來均分。所以,即使 interval 是 20,最後一個范圍也只能擴展到stop(11 個數)。
如果需要的話,Partition 會在返回的范圍中加上足夠的空白,以便讓返回值在冒號的左右兩側有相同的字符數,其值就是 stop 中的字符數再加一。如此可确保當要使用 Partition 与其它的數值作運算時,所得的字符串,可以在之後的排序操作中得到正确的結果。
如果 interval 是 1,則范圍便是 number:number,而不管 start 和 stop 參數如何。比如說,如果 interval 是 1,number 是 100,而 stop 是 1000,則 Partition 會返回 " 100: 100"。
如果任何部分是 Null,則 Partition 會返回一個 Null。
|
|
|