нужно перевести конкретный случай t-sql в pl / sql - PullRequest
0 голосов
/ 20 августа 2010

Может кто-нибудь сказать мне, как перевести следующий оператор 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

Суть в том, что мне нужно проверить две разные опции из таблицы для одного поля в операторе выбора.

Я пытался что-то сделать с оператором IF в pl / sql, но он просто не работает для меня:

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

На самом деле я не уверен, как написать оператор IF внутри оператора SELECT ..
А также мне нужно сделать это ВНУТРИ оператора select, потому что я создаю представление.

Ответы [ 2 ]

3 голосов
/ 20 августа 2010

Использование:

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 голос
/ 20 августа 2010

Если я правильно помню, PL / SQL также поддерживает case. Вам просто нужно переместить псевдоним столбца с «field1=» перед выражением на «AS filed1» после выражения.

...