0

次の T-SQL ステートメントを翻訳する方法を教えてください。

SELECT fileld1 = CASE 
                   WHEN T.option1 THEN -1 
                   ELSE
                     CASE WHEN T.option2 THEN 0
                     ELSE 1
                   END
                 END
  FROM Table1 AS T

ポイントは、select ステートメントの 1 つのフィールドに対して、テーブルから 2 つの異なるオプションを検証する必要があるということです。

pl/sql で IF ステートメントを使用して何かをしようとしましたが、うまくいきません。

SELECT IF T.option1 THEN -1 
       ELSE IF T.option2 THEN 0  
       ELSE 1 
       END 
  FROM Table1 AS T

SELECT ステートメント内に IF ステートメントを記述する方法が実際にはわかりません。
また、ビューを構築しているため、select ステートメント内でそれを行う必要があります。

4

2 に答える 2

3

使用する:

SELECT CASE 
         WHEN T.option1 = ? THEN -1 
         WHEN T.option2 = ? THEN 0
         ELSE 1
       END AS field1
  FROM Table1 AS T

元の TSQL を動作させることができません。

メッセージ 4145、レベル 15、状態 1、行 4 'THEN' の近くで条件が予想されるコンテキストで指定された非ブール型の式。

…価値評価がないから。列が null かどうかを確認する場合は、次を使用する必要があります。

SELECT CASE 
         WHEN T.option1 IS NULL THEN -1 
         WHEN T.option2 IS NULL THEN 0
         ELSE 1
       END AS field1
  FROM Table1 AS T

...または null でない場合に必要な場合:

SELECT CASE 
         WHEN T.option1 IS NOT NULL THEN -1 
         WHEN T.option2 IS NOT NULL THEN 0
         ELSE 1
       END AS field1
  FROM Table1 AS T

CASE 式の短絡 - 最初の WHEN が一致した場合、値を返し、その行の処理を終了します - したがって、その後のオプションは考慮されません。

于 2010-08-20T16:15:36.117 に答える
1

私の記憶が正しければ、PL/SQL もcase. field1=列エイリアスを式の前の " "から式の後の " "に移動するだけAS filed1です。

于 2010-08-20T16:04:06.327 に答える