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 语句中的单个字段验证表中的两个不同选项。

我试图用 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”。

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

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

于 2010-08-20T16:15:36.117 回答
1

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

于 2010-08-20T16:04:06.327 回答