次の方法で共有


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

コミュニティの関心グループが Yammer から Microsoft Viva Engage に移行されました。 Viva Engage コミュニティに参加し、最新のディスカッションに参加するには、「 Finance and Operations Viva Engage Community へのアクセスを要求する 」フォームに入力し、参加するコミュニティを選択します。

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.');
}