Подтвердить что ты не робот

SQL Server INLINE ЕСЛИ ЕСЛИ

В моей таблице я получил столбец, значение которого равно 0 или 1. Если этот столбец равен 0, я вывожу значение как "нет"; если 1, я должен выводить как "да" для всех строк. Как я могу это сделать, только используя инструкцию SQL. Благодаря

4b9b3361

Ответ 1

SQL Server не имеет встроенного оператора if, но он имеет встроенный case, который может использоваться для выполнения то же самое.

Случай имеет две формы, один из которых:

select 
 case MyFlag 
   when 1 then 'YES'
   when 0 then 'NO'
   else 'OOPS'
 end
from MyTable

где он используется точно так же, как переключатель в C-подобных языках, а другой:

select 
 case 
   when MyFlag = 1 then 'YES'
   when MyFlag = 0 then 'NO'
   -- when some unrelated condition...
   else 'OOPS'
 end
from MyTable

где он senquential оценивает список условий и возвращает первое, что выполнено.

P.S. Часть end обязательна, и я обычно забываю об этом. Это также обычно для простой строки case, чтобы быть полностью вложенной, например

select (case MyFlag when 1 then 'Yes' else 'No' end) as MyFlagDesc

Ответ 2

Я понимаю, что этот вопрос (который появляется в верхней части результатов Google для "sql server inline if" ) составляет 2 года, но с SQL Server 2012 ответы несколько устарели. Он также представляется дубликатом SQL inline if question type question, но этот вопрос (будучи еще более старым) не имеет актуального ответа либо.

В SQL Server 2012 вы можете использовать функцию IIF:

IIF ( boolean_expression, true_value, false_value )

Пример:

SELECT IIF(someColumn = 1, 'yes', 'no')

Ответ 3

Две возможности:

(CASE WHEN condition1 THEN Value1 ELSE Value2 END)

или, самое полное решение:

(CASE value_to_check WHEN Value1 THEN Result1 [WHEN ... THEN ...] ELSE OtherResult END)

Ответ 4

Что-то вроде этого:

SELECT 
    CASE YourColumn
       WHEN 0 THEN 'no'
       WHEN 1 THEN 'yes'
       ELSE 'nothing'
    END
FROM dbo.YourTable

Ответ 5

Я смешал три IIF в одной строке, у меня есть три переменные, и я хочу знать, какой из них больше нуля, но я знаю порядок приоритета PersonHomePhoneID, PersonWorkPhoneID и PersonCellPhoneID

IIF(@PersonHomePhoneID > 0 , @PersonHomePhoneID, IIF(@PersonWorkPhoneID > 0 , @PersonWorkPhoneID, IIF(@PersonCellPhoneID > 0 , @PersonCellPhoneID, 0))) 

Ответ на вопрос:

IIF(column = 1 , 'yes', IIF(column = 0, 'no', ''))