計算された一連の範囲内で値が出現する場所を示す Variant (String) を返します。
構文
Partition(number, start, stop, interval)
Partition 関数構文の引数は次のとおりです。
| 引数 | 説明 |
|---|---|
| number | 必須。 範囲に対して評価する整数です。 |
| start | 必須。 数値範囲全体の最初の整数です。 0 より小さい値は指定できません。 |
| stop | 必須。 数値範囲全体の最後の整数です。 数値を start 以下にすることはできません。 |
| interval | 必ず指定します。 数値の範囲全体 ( 開始 と 停止の間) 内のパーティションのサイズを指定する整数。 |
解説
Partition 関数は、数値が該当する特定の範囲を特定し、その範囲を示すバリアント (文字列) を返します。 Partition 関数は、クエリで最も役に立ちます。 たとえば、さまざまな範囲 (1 から 1000、1001 から 2000 など) に含まれる注文の数を示す選択クエリを作成できます。
次の表は、 開始引数、 停止引数、 間隔 引数の 3 セットを使用して範囲を決定する方法を示しています。 [最初の範囲] 列と [最後の範囲] 列には、 パーティション が返す内容が表示されます。 範囲は lowervalue:uppervalue で表され、範囲の下限 (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 が定義した場合の結果を示しています。 間隔が 20 であっても、最後の範囲は停止 (11 桁の数字) まで拡張されます。
必要な場合、 Partition は 、コロンの左右に、 ストップに 1 を加えた文字と同じ文字数になるように、十分な数の先頭スペースを含む範囲を返します。 これにより、Partition を他の値と共に使った場合でも、結果のテキストは以降の並べ替え操作の間に正しく処理されます。
interval が 1 の場合、範囲は、開始引数と停止引数に関係なく、数値:数値です。 たとえば、 interval が 1、 数値 が 100、 stop が 1000 の場合、 パーティションは " 100: 100" を返します。
いずれかの引数が Null の場合、Partition は Null を返します。
クエリの例
| Expression | 結果 |
|---|---|
| SELECT Partition(unitprice,40,240,20) AS PriceRange, count(productsales.unitprice) AS Count FROM productSales GROUP BY Partition(unitprice,40,240,20); | "開始" (40) から "停止" (240) までのフィールド "単価" の値の範囲のセットを "間隔" (20) のサイズで等しく作成し、それぞれの範囲の "単価" の数を計算します。 列 PriceRange の範囲と列 '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);