計算された一連の範囲内で値が出現する場所を示す Variant (String) を返します。
構文
Partition( number, start, stop, interval)
Partition 関数構文の引数は次のとおりです。
引数 |
説明 |
number |
必須。 範囲に対して評価する整数です。 |
start |
必須。 数値範囲全体の最初の整数です。 0 より小さい値は指定できません。 |
stop |
必須。 数値範囲全体の最後の整数です。 start 以下の値は指定できません。 |
interval |
必須。 数値範囲全体 (start から stop まで) の中の区画のサイズを指定する整数です。 |
解説
Partition 関数は、数値範囲全体の中で number が含まれる特定の範囲を特定し、その範囲を示す Variant (String) を返します。 Partition 関数は、クエリで最も役に立ちます。 たとえば、さまざまな範囲 (1 から 1000、1001 から 2000 など) に含まれる注文の数を示す選択クエリを作成できます。
次の表は、 開始、 停止、 および間隔 の引数の 3 つのセットを使用して範囲を決定する方法を示しています。 [最初の範囲] 列と [最後の範囲] 列には、 パーティション から返される値が表示されます。 範囲は 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: " |
上の表の 3 行目は、start と stop によって定義される範囲が interval によって均等に分割できない場合の結果を示します。 最後の範囲は stop に達していますが (11 個の値)、interval は 20 です。
Partition は、コロンの左右の文字数が等しくなるように (stop の文字数より 1 だけ大きい文字数)、必要に応じて先頭にスペースを追加して返します。 これにより、Partition を他の値と共に使った場合でも、結果のテキストは以降の並べ替え操作の間に正しく処理されます。
interval が 1 の場合は、start 引数と stop 引数に関係なく、範囲は number:number になります。 たとえば、interval が 1、number が 100、stop が 1000 の場合、Partition は " 100: 100" を返します。
いずれかの引数が Null の場合、Partition は Null を返します。
クエリの例
式 |
結果 |
SELECT Partition(unitprice,40,240,20) AS PriceRange, count(productsales.unitprice) AS Count FROM productSales GROUP BY Partition(unitprice,40,240,20); |
"unitprice" フィールドの値の範囲のセットを "start"(40) から "stop"(240) に等しい "interval"(20) サイズで作成し、それぞれの範囲の "unitprice" の数を計算します。 列 PriceRange に範囲を表示し、列 'Count' に count を表示します。 |
VBA の例
この例では、Freight フィールドを含む Orders テーブルがあるものとします。 配送料が各範囲に含まれる注文の数をカウントする選択プロシージャを作成します。 最初に Partition 関数を使ってこれらの範囲を設定した後、SQL の Count 関数で各範囲の注文の数をカウントします。 この例の Partition 関数の引数は、start = 0、stop = 500、interval = 50 です。 したがって、最初の範囲は 0:49 であり、上限の 500 まで同様に分割されます。
SELECT DISTINCTROW Partition([freight],0, 500, 50) AS Range,
Count(Orders.Freight) AS Count FROM Orders GROUP BY Partition([freight],0,500,50);