SQL Server ВНУТРИ ЕСЛИ - PullRequest
       4

SQL Server ВНУТРИ ЕСЛИ

37 голосов
/ 07 июля 2011

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

Ответы [ 5 ]

63 голосов
/ 02 июня 2014

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

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

IIF ( boolean_expression, true_value, false_value )

Пример:

SELECT IIF(someColumn = 1, 'yes', 'no')
62 голосов
/ 07 июля 2011

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

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

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

.
select (case MyFlag when 1 then 'Yes' else 'No' end) as MyFlagDesc
11 голосов
/ 07 июля 2011

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

(CASE WHEN condition1 THEN Value1 ELSE Value2 END)

или, наиболее полное решение:

(CASE value_to_check WHEN Value1 THEN Result1 [WHEN ... THEN ...] ELSE OtherResult END)
7 голосов
/ 07 июля 2011

Примерно так:

SELECT 
    CASE YourColumn
       WHEN 0 THEN 'no'
       WHEN 1 THEN 'yes'
       ELSE 'nothing'
    END
FROM dbo.YourTable
2 голосов
/ 06 января 2017

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

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

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

IIF(column = 1 , 'yes', IIF(column = 0, 'no', ''))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...