2010-08-20 37 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」。