0

私は SQL の初心者で、SQL で次のことを実行したいと考えています。Crystal で実行しましたが、SQl で実行できるかどうかはわかりません。Crystalでこれを行う方法は次のとおりです。これはSQLで行うことができます:

{@Adjust Code}null の場合、{@Adjust Code WH}null 値がチェックされた 2 つの変数は、フィールドに作業「空白」を入力します

以下のコードを select ステートメントに入れることができますか :

if {RV_CLAIM_DETAILS.NET} <> 0
    then {RV_CLAIM_DETAILS.NET}

    else if ({@Adjust Code} in ["#C", "A2", "24"] or
            {@Adjust Code} = "23" and {@Adjust Code WH} = "24")
             then {RV_CLAIM_DETAILS.CONTRVAL}

よろしく、 ダビッド

4

2 に答える 2

2

このロジックを表す標準的な SQL の方法は、caseステートメントを使用することです。

(case when RV_CLAIM_DETAILS.NET <> 0
      then RV_CLAIM_DETAILS.NET
      when "@Adjust Code" in ('#C', 'A2', '24') or
           "@Adjust Code" = '23' and "@Adjust Code WH" = '24'
      then RV_CLAIM_DETAILS.CONTRVAL
 end) as myValue

これは、ステートメントとまったく同じセマンティクスを持っています。最初の句が一致する場合、その値が返されます。一致するものがない場合は、NULLが返されます。

いくつかのメモ。まず、SQL は文字列を区切るために二重引用符ではなく単一引用符を使用します。とはいえ、一部のデータベース エンジンは、その目的で二重引用符をサポートしています。

'@'第 2 に、通常、エスケープされていない限り、 で始まる列名は許可されません。名前をエスケープする 1 つの方法は、二重引用符を使用することです。とはいえ、一部のデータベース エンジンでは、同じ目的で角括弧や逆引用符を使用しています。また、SQL には不要な中かっこも削除しました。

于 2013-11-04T17:25:43.290 に答える
1

単純な CASE 式:

CASE input_expression 
     WHEN when_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END 
Searched CASE expression:
CASE
     WHEN Boolean_expression THEN result_expression [ ...n ] 
     [ ELSE else_result_expression ] 
END

例:

SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber;
GO
于 2013-11-04T17:23:26.133 に答える