2010-08-20 53 views
0

谁能告诉我该怎么翻译下面的T-SQL语句:需要翻译在PL/SQL专用的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

用途:

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匹配,它返回值&退出该行的处理 - 所以之后的选项不被考虑。

1

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