select ステートメントを式として記述

select ステートメントを式として使用することができます。 このタイプの select ステートメントは select ステートメント と呼ばれます。

  • テーブル バッファ変数は、式 select ステートメントで使用できません。
  • テーブルの名前は、from 句で使用する必要があります。
  • 結合キーワードはサポートされていません。
  • order by 句でフィールド名を修飾するために、テーブル名を使用することはできません。
  • where 句では、テーブル名をフィールドの修飾子として使用する必要があります。
  • 式の select ステートメントで言及できるのは 1 つのテーブルのみです。 したがって、サブセレクトは、サポートされていない join キーワードの回避策としてサポートされていません。
  • データを入力できる唯一の列は、select 句の from 句の前に名前が付けられた列です。
  • 閉じ括弧の後に、列の名前を使用してデータ値を参照します。

次の式は、CustTable テーブルの最初の行 (行が存在する場合) のAccountNum 列の値を返します。

str accountNum = (select AccountNum from CustTable order by AccountNum desc).AccountNum;
info('Max AccountNum: ' + accountNum);

前の例と同じ結果を達成する単純な方法を次に示します。

str accountNum = (select maxof(AccountNum) from CustTable).AccountNum;
info('Max AccountNum: ' + accountNum);

次の例では、ブロックされていない顧客の最大 RecId値を返します。 ここで、maxof 集計関数が使用され、RecId フィールドが機能に記載されます。 集計関数に記載されているフィールドは、閉じかっこの後のデータ値を参照するために使用されるフィールド名と一致していなければなりません。 それ以外の場合、空のデータが返されます。

int64 nRecId = (select maxof(RecId) from CustTable
            where CustTable.Blocked == CustVendorBlocked::No).RecId;
info("Max RecId: " + int642Str(nRecId));

次の例では、RecId フィールドは RecId の値ではないデータ値を参照するために使用します。 count 集計関数は、RecId値を返しません。 RecId フィールドは通常 count 関数と共に使用するのが一般的なプラクティスです。

int64 nRecId = (select count(RecId) from CustTable
            where CustTable.Blocked == CustVendorBlocked::No).RecId;
info('Count of unblocked customers: ' + int642Str(nRecId));

フィールド上の select ステートメント

select ステートメントをフィールド上のルックアップで使用することができます。 テーブルのレコードをフェッチする選択ステートメントの後、.fieldName を入力してテーブルのフィールドを参照することができます。 これらの select ステートメントは、式で使用する必要があります。 通常の select ステートメントは、フィールド select ステートメントと次の点で異なります。

  • フィールド select ステートメントはテーブル上で直接動作します。
  • 通常の select ステートメントは、テーブル バッファ変数で動作します。

次の例では、select ステートメントからフィールドにアクセスする方法を示します。

print((select CustTable order by AccountStatement).AccountStatement);

if ((select custTable where CustTable.AccountNum == '3000').CreditMax < 5000)
{
    info('This customer has a credit maximum less than $5000.');
}