FROM句

FROM句を文に含めてレコードのソースを指定する必要があります。

FROM句は文に必須で、状態名や定義済文などのEQL文のレコードのソースを指定します。

FROMの構文は次のとおりです。

FROM <recSource> [alias]
ここで、<recSource>には次のものを指定できます。

問合せでFROM句を省略すると、EQLパーサーによってエラーが返されます。

定義済文

別の文の結果をレコード・ソースとして使用できます。次に示す例では、最初の文(RepQuartersを指定)で販売トランザクションの総数を、四半期および販売員ごとに計算しています。次に販売員ごとの平均トランザクション数を計算するために、後続の文(Quartersを指定)でこの結果を四半期ごとにグルーピングします。
DEFINE RepQuarters AS
SELECT COUNT(TransId) AS NumTrans
FROM SaleState
GROUP BY SalesRep, Quarter;

RETURN Quarters AS
SELECT AVG(NumTrans) AS AvgTransPerRep
FROM RepQuarters
GROUP BY Quarter
RepQuarters文によって、レコードのリストが生成されます。各レコードに格納されている属性は、{ SalesRep, Quarter, NumTrans }です。次に例を示します。
{ J. Smith, 11Q1, 10 }
{ J. Smith, 11Q2, 3 }
{ F. Jackson, 10Q4, 10 }
...
Quartersの文では、RepQuartersの文の結果を使用して属性{ Quarter, AvgTransPerRep }のリストを生成します。次に例を示します。
{ 10Q4, 10 }
{ 11Q1, 4.5 }
{ 11Q2, 6 }
...

状態名

状態名は、次の構文を使用してEQLのFROM句内で指定できます。
FROM <statename>

この形式では、すべてのフィルタが適用された状態を表します(つまり、対話サービスの問合せの状態にあるすべてのフィルタ)。

1つの例として、EQLQuery型を使用している、次のような単純な対話サービスの問合せについて考えてみます。
<Request>
   <Language>en</Language>
   <State>
      <Name>WineState</Name>
      <CollectionName>Wines</CollectionName>
      <DataSourceFilter Id="DataFltr">
        <filterString>WineType <> 'Red'</filterString>
      </DataSourceFilter>
      <SelectionFilter Id="SecFltr">
        <filterString>Price > 25</filterString>
      </SelectionFilter>
   </State>
   <EQLConfig Id="WineRecs">
      <EQLQueryString>
        RETURN results AS
        SELECT Price AS prices
        FROM WineState
        GROUP BY prices
      </EQLQueryString>
   </EQLConfig>
</Request>
この問合せは次のように動作します。
  1. 最初に、DataSourceFilterフィルタ(これはセキュリティ・フィルタです)により、WineType=Redが割り当てられているレコードが削除されます。現在の小規模なデータ・セットの場合、フィルタを通過するのは11レコードのみです。(WineTypeは単一割当てである必要があることに注意してください。そうではない場合、問合せは失敗します。)
  2. 次に、SelectionFilterフィルタにより、Price割当てが$25以上のレコードが選択されます。ここで(前の11レコードから)7レコードが除外され、4レコードが残ります。
  3. EQL文のFROM句により、WineStateという名前の状態を参照します。

EQL文のFROM句でWineStateという名前の状態を参照しているため、状態の両方のフィルタが適用され、4レコードが返されます。