CASE式

検索されたCASE式は、従来のプログラミング言語のif-then-else文に似ています。これは、いくつかのWHEN-THENペアで構成され、末尾にオプションのELSE句が続きます。各WHEN式は条件です。つまり、BOOLEANを返す必要があります。THEN式およびELSE式は、項目の順序を返す場合があります。CASE式は、最初にWHEN式を上から下に評価して、最初にtrueを返すものまで評価されます。trueを返すのがi番目のWHEN式の場合、i番目のTHEN式が評価され、その結果はCASE式全体の結果になります。WHEN式でtrueが返されない場合、ELSEがあれば、その式が評価され、その結果がCASE式全体の結果となります。それ以外の場合、CASE式の結果は空の順序になります。

例:
SELECT
    fullName,
    CASE
        WHEN NOT exists bag.bagInfo.flightLegs[0]
        THEN "you have no bag info"
        WHEN NOT exists bag.bagInfo.flightLegs[1]
        THEN "you have one hop"
        WHEN NOT exists bag.bagInfo.flightLegs[2]
        THEN "you have two hops."
        ELSE "you have three hops."
    END AS NUMBER_HOPS
FROM BaggageInfo bag WHERE ticketNo=1762340683564

説明: CASE文を使用して、乗客のbagInfoのトランジットがいくつあるかを確認する必要があります。flightLegs配列に要素がない場合、その乗客には手荷物データがありません。flightLegs配列に1つの要素のみがある場合、トランジット・ポイントは1つのみ存在します。同様に、flightLegs配列に2つの要素がある場合、2つの中継点があります。それ以外の場合は、3つのトランジット・ポイントがあります。ここでは、1つの手荷物のトランジット・ポイントまたは中継点は最大で3つと想定します。

出力:
{"fullName":"Mary Watson","NUMBER_HOPS":"you have two hops."}
例2: 乗客の既存のtagNum値が文字列でない場合、その値を更新するようにシステムに警告する問合せを記述します。
SELECT bag.bagInfo[].tagNum,
CASE
   WHEN bag.bagInfo[0].tagNum is of type (NUMBER)
   THEN "Tagnumber is not a STRING. Update the data"
   ELSE "Tagnumber has correct datatype"
   END AS tag_NUM_TYPE
FROM BaggageInfo bag 

説明: bagInfoスキーマ内の乗客のtagNumはSTRINGデータ型です。ただし、アプリケーションが誤ってtagNumの値としてNUMBER値を取得する可能性があります。問合せではis of type演算子を使用してこれを取得し、既存の値が文字列でない場合はtagNumを更新するようシステムに指示します。

出力(簡潔にするために数行のみ表示されています)。
{"tagNum":"17657806240001","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":"17657806224224","tag_NUM_TYPE":"Tagnumber has correct datatype"}
{"tagNum":17657806243578,"tag_NUM_TYPE":"Tagnumber is not a STRING. Update the data"}
{"tagNum":"1765780623244","tag_NUM_TYPE":"Tagnumber has correct datatype"}