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