最近のアクセス:
Query オブジェクト: フィルタ

次の図に、Query オブジェクトのフィルタノードを示します。このノードを使用して、下の例に示すように、フィルタを適用します:
イメージ:46208.png

フィルタ

有効なフィルタ:
次の図は、フィルタノードの有効なエントリを示します。つまり、有効なフィルタは次の要素で構成されます。
フィルタ:
イメージ:46217.png
論理式:
イメージ:46218.png
論理演算子:
イメージ:46219.png
最初の定義と、その後の詳細に基づいて、次のようなフィルタ値を設定できます。
CustomerId = 1
CustomerId > 5
CustomerId <> 10
CustomerId in (1 to 5)
not CustomerId in (1 to 5)
CustomerId in (1,2,5,17,30)
not CustomerId in (1,2,5,17,30)
CustomerName like "Peter Pan"
not CustomerName like "Peter Pan"
CustomerId in (CustomerId where (ProductId = 10))
not CustomerId in (CustomerId where (ProductId = 10))
Sum( InvoiceAmount ) > 10000
not Count( CustomerId ) in (4, 500, 1000)
Average( InvoiceAmount) by InvoiceDate > 1000

有効な値

イメージ:46222.png

1 Numeric 定数
"Peter" Character 定数
#2009-12-31# Date 定数
#2009-12-31 08:55:00# DateTime 定数
&Balance Query オブジェクトの Parameter ノードで定義されているパラメーター
Sum(InvoiceAmount) 合計
Count(CustomerId) カウント
Average(InvoiceAmount) 平均
Sum(Average(InvoiceAmount) by InvoiceDate) 合計

日付および日時

Date または Datetime 項目属性を使用する場合、日付のフィルタ形式は #YYYY-MM-DD#、日時のフィルタ形式は #YYYY-MM-DD HH:MM:SS# です。これ以外の形式を使用すると次のエラーが発生します。
無効な日付変数です。ANSI 形式の YYYY-MM-DD HH: MM: SS で入力する必要があります。

サブクエリ

有効なサブクエリ:
単一の定数や定数のリストを指定するのではなく、データベースから値を取得するフィルタを定義するときに使用します。
イメージ:46220.png
入力値の説明:
イメージ:46221.png

サプライヤー (Supplier) と、その製品 (Product) を関連付けているテーブルがあるとします。
SupplierId*
ProductId*
ID (ProductId) が 5 の製品を販売しているすべてのサプライヤーと、その販売数量を返すクエリが必要だとします。このためには、次のようなクエリを指定します:
# 項目属性
SupplierName
ProductDescription
# フィルタ
SupplierId in (SupplierId where ProductId = 5)
説明
サブクエリは、1 つまたは複数の値を返す必要があります。関係演算子 (=、>、>=、<、<=、<>) のいずれかを使用した場合は、値が 1 つだけ返されます。例: att=(subquery)
クエリで複数の値を返す必要がある場合は、最初の値はサブクエリの結果になります。
クエリで in 演算子を使用した場合も、値が 1 つだけ返されます。値のリストの中には、サブクエリを含める必要があります。例: att in (value1, value2, subquery, value3)。このリストは、たとえば、顧客 1、顧客 2、顧客 3、購入数量が最も多い顧客 (この顧客はサブクエリで取得されます) にすることができます。クエリで範囲を指定したときも、値が 1 つだけ返されます。
サブクエリで複数の値を返せるのは、そのエレメントにサブクエリだけを持つ in 演算子を使用した場合だけです。たとえば、ID が 5 の製品を販売しているすべてのサプライヤーとその販売数量を返す場合が当てはまります。つまり、次のようになります: att in (subquery)

論理演算子

論理演算子を使用したフィルタ:

イメージ:46217.png
論理式:
イメージ:46218.png
論理演算子:
イメージ:46219.png
次に、異なる種類のフィルタを組み合わせる例を示します。
イメージ:46223.png
AND と OR を組み合わせる必要がある場合、明示的に指定する必要があります。たとえば、それぞれを OR でつなげてから、両方の結果を AND で結合します。
(filter1 or filter2, or... or filterN) and (anotherFilter1 or anotherFilter2 or ... or anotherFilterM)
例:
(CustomerId > 5 or CustomerId <> 10 or CustomerId in (1 to 5) or CustomerId in (CustomerId where CustomerName <> "Peter Pan")) and (not CustomerName like "Hook" or CustomerId in (1,2,3,4))

集計

有効: Sum | Count | Average | Min | Max:
イメージ:46209.png
by:
イメージ:46212.png
defined by:
イメージ:46213.png
weighted by:
イメージ:46214.png
算術計算式:
イメージ:46216.png
SumCountAverageMaxMin を使うと、ネストできます。Where 条件により、何が足し合わされるかが決まります。この条件は集計前に適用されます。たとえば、
Sum(InvoiceAmount) where InvoiceAmount > 1000
と指定すると、請求額が 1000 より多い請求書だけが合計されます。

検討事項

Query オブジェクトのフィルタと、GeneXus のほかのオブジェクト (プロシージャー、Web パネル、データプロバイダー) で指定するフィルタの相違点:
  • Query オブジェクトのフィルタは、サーバーで処理されます。そのため、クライアントのロジック (データプロバイダーなど) が呼び出されることはありません。
  • データセレクターは使用できません。

使用可能バージョン

この動作は GeneXus 16 Upgrade 11 以降で利用できます。




サブページ
Created: 14/09/18 03:06 by Admin Last update: 21/05/21 05:23 by Admin
カテゴリ
Powered by GXwiki 3.0