メインコンテンツまでスキップ
バージョン: 20 R7 BETA

DISTINCT VALUES

DISTINCT VALUES ( aField ; array {; countArray} )

引数説明
aFieldFieldデータとして使用する、インデックス可能なフィールド
arrayArrayフィールドデータを受け取る配列
countArrayInteger array, Real arrayそれぞれの値の数を受け取る配列

説明

DISTINCT VALUESコマンドは、aFieldが属するテーブルのカレントセレクションのaFieldフィールドからの重複しない(ユニークな)値で構成されるarray配列を作成します。また任意の引数countArrayにそれぞれの値のオカレンス数を返す事もできます。

DISTINCT VALUESコマンドには、インデックスが可能な (インデックスをサポートするタイプの) フィールドを渡すことができます。実際にインデックスされている必要はありません。
しかし、インデックス付けされていないフィールドでこのコマンドを実行すると遅くなります。また、この場合、コマンドはカレントレコードを失うことに注意してください。

DISTINCT VALUESはカレントセレクションのレコードをブラウズし、重複しない値を保持します。

注: トランザクション中にDISTINCT VALUESコマンドが呼び出された場合、トランザクション中に作成されたレコードも処理の対象となります。

DISTINCT VALUES で使用される配列は、第一引数渡すフィールドと型が一致している必要があります。一致していない場合、配列の型は修正されます。このルールには一つの例外 があります: フィールドがピクチャ型である(かつキーワードインデックスと関連付けられている)場合、対応する配列はテキスト型でなければなりません。

コマンドの呼び出し後、配列のサイズはセレクション中の重複しない値の数と同じです。コマンドはカレントセレクションまたはカレントレコードを変更することはありません。 DISTINCT VALUES コマンドはフィールドのインデックスを使用するので、array中の要素は昇順でソートされて返されます。これが目的の並べ替え順であれば、DISTINCT VALUESを使用した後にSORT ARRAYコマンドを呼び出す必要はありません。

: DISTINCT VALUESを キーワードインデックスが適用されたテキストまたはピクチャーフィールドに対して実行すると、コマンドはインデックスのキーワードで構成される配列を作成します。他のタイ プのデータと異なり、返される値はインデックスの存在により異なります。テキストフィールドの場合、フィールドに標準のインデックスが定義されていても、 常にキーワードインデックスが採用されます。テキストやピクチャーフィールドにキーワードインデックスが割り当てられていない場合、空の配列が返されます。

このコマンドは任意の引数としてcountArray配列を受け取ります。この配列を渡した場合、aField引数で指定したフィールド内にあるそれぞれの重複しない値の、カレントセレクション内で検知されたオカレンス数が返されます。countArray配列のサイズは、array配列内の要素の数と自動的に同じにされます。例えば、"A"、"B"そして"A"というフィールド値である三つのレコードを含むセレクションに対しては、array配列には{A;B}が返され、countArray配列には{2;1}が含まれます。countArray配列には倍長整数配列または実数配列を渡す事ができます。

注: countArray引数は、テキストフィールドまたはキーワードインデックスと関連づけられているピクチャーフィールドに関してはサポートされません。

警告: DISTINCT VALUESコマンドは、セレクション及びそこ に含まれる重複しない値の数によって非常に大きな配列を作成する場合があります。配列はメモリ上に存在します。そのためコマンドの実行後、結果をテストす るのは良いことです。これを行うには、作成された配列のサイズをテストするか、ON ERR CALLプロジェクトメソッドを使用してコマンドの呼び出しをカバーします。

4D Server: このコマンドは4D Server用に最適化されています。サーバ側で配列の作成と値の計算が行われ、その後全体がクライアントに送られます。

注: このコマンドはオブジェクト型フィールドをサポートしません。

例題 1

以下の例は、カレントセレクションから都市のリストを作成します。そして、会社の店舗がある都市の数を求めます:

 ALL RECORDS([Retail Outlets]) // レコードのセレクションを作成
 DISTINCT VALUES([Retail Outlets]City;asCities)
 ALERT("会社は"+String(Size of array(asCities))+"都市に店舗を持ちます。")

例題 2

"Pictures"フィールドに割り当てられたキーワードインデックスの完全なリストを取得します:

 ALL RECORDS([PICTURES])
 ARRAY TEXT(<>_MyKeywords;10)
 DISTINCT VALUES([PICTURES]Photos;<>_MyKeywords)

例題 3

統計を計算するために、フィールド内の固有の値を降順で並べ替えしたい場合を考えます:

 ARRAY TEXT($_issue_type;0)
 ARRAY LONGINT($_issue_type_instance;0)
 DISTINCT VALUES([Issue]iType;$_issue_type;$_issue_type_instances)
 SORT ARRAY($_issue_type_instances;$_issue_type;<)

参照

GET TEXT KEYWORDS
ON ERR CALL
SELECTION RANGE TO ARRAY
SELECTION TO ARRAY