需要在pl / sql中翻译特定的t-sql案例

时间:2010-08-20 15:59:18

标签: tsql plsql if-statement case translate

任何人都可以告诉我如何翻译以下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语句中的单个字段验证两个不同的选项。

我试图用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语句中执行它,因为我正在构建一个视图。

2 个答案:

答案 0 :(得分:3)

使用:

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

我无法让你的原始TSQL工作 - 我得到:

  

Msg 4145,Level 15,State 1,Line 4   在预期条件的上下文中指定的非布尔类型的表达式,接近'THEN'。

...因为没有价值评估。如果您要检查列是否为空,则需要使用:

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

...或者如果你需要它们不是空的话:

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表达式shortcircuit - 如果第一个WHEN匹配,则返回值&退出该行的处理 - 因此不考虑之后的选项。

答案 1 :(得分:1)

如果我没记错的话,PL / SQL也支持case。您只需要在表达式之后将列别名从“field1=”移到表达式之后的“AS filed1”。