Как мне выполнить IF...THEN
в SQL SELECT
заявлении?
Например:
SELECT IF(Obsolete = 'N' OR InStock = 'Y' ? 1 : 0) AS Saleable, * FROM Product
sql
sql-server
tsql
if-statement
case
Эрик Лабашоски
источник
источник
WHERE
и к,CHECK
но не кSELECT
.Ответы:
Этот
CASE
оператор наиболее близок к IF в SQL и поддерживается во всех версиях SQL Server.Вам нужно только сделать,
CAST
если вы хотите, чтобы результат в качестве логического значения. Если вы довольныint
, это работает:CASE
выписки могут быть встроены в другиеCASE
выписки и даже включены в совокупности.SQL Server Denali (SQL Server 2012) добавляет IIF оператор который также доступен в доступе (на что указывает Мартин Смит ):
источник
Ситуация в вашем случае - ваш друг, и она принимает одну из двух форм:
Простой случай:
Расширенный случай:
Вы можете даже поместить операторы case в порядок по условию для действительно необычного порядка.
источник
AS Col_Name
после,END
чтобы назвать результирующий столбецС SQL Server 2012 вы можете использовать
IIF
функцию для этого.По сути, это всего лишь сокращенный (хотя и не стандартный SQL) способ написания
CASE
.Я предпочитаю лаконичность по сравнению с расширенной
CASE
версией.И то,
IIF()
и другоеCASE
разрешается как выражения внутри оператора SQL и может использоваться только в четко определенных местах.Если эти ограничения не могут удовлетворить ваши потребности (например, необходимость возвращать наборы результатов различной формы в зависимости от какого-либо условия), то SQL Server также имеет процедурное
IF
ключевое слово.Однако при таком подходе следует иногда проявлять осторожность, чтобы избежать проблем с анализом параметров .
источник
Вы можете найти несколько хороших примеров в Силах операторов SQL CASE , и я думаю, что заявление, которое вы можете использовать, будет примерно таким (от 4guysfromrolla ):
источник
Используйте CASE. Что-то вроде этого.
источник
источник
Microsoft SQL Server (T-SQL)
В
select
, используйте:В
where
предложении используйте:источник
where Obsolete = 'N' or InStock = 'Y'
и практически не разрезать "где"По этой ссылке мы можем понять
IF THEN ELSE
в T-SQL:Разве этого недостаточно для T-SQL?
источник
источник
Простой оператор if-else в SQL Server:
Вложенный оператор If ... else в SQL Server -
источник
SELECT
как спросил ОП?В SQL Server 2012 была добавлена новая функция IIF (которую мы можем просто использовать):
источник
Используйте оператор CASE:
источник
Используйте чистую битовую логику:
Смотрите рабочую демонстрацию: если тогда без
case
в SQL Server .Для начала нужно отработать значение
true
иfalse
для выбранных условий. Вот два NULLIF :объединение дает 1 или 0. Далее используйте побитовые операторы .
Это самый метод WYSIWYG .
источник
источник
источник
источник
Это не ответ, а пример использования оператора CASE, где я работаю. У него есть вложенный оператор CASE. Теперь вы знаете, почему мои глаза скрещены.
источник
CASE
меня проголосовали и отметили как ответ вместо того,IF
который должен был быть ответом, как этот, это все ещеCASE
утверждение, а не ответIF
.Если вы вставляете результаты в таблицу впервые, а не переносите результаты из одной таблицы в другую, это работает в Oracle 11.2g:
источник
В качестве альтернативного решения
CASE
оператора можно использовать табличный подход:Результат:
источник
источник
Для тех, кто использует SQL Server 2012, IIF - это функция, которая была добавлена и работает в качестве альтернативы операторам Case.
источник
источник
У вас может быть два варианта для реализации:
Использование IIF, которое появилось в SQL Server 2012:
Использование
Select Case
:источник
Вопрос:
ANSI:
Использование псевдонимов -
p
в этом случае - поможет предотвратить проблемы.источник
Использование SQL CASE аналогично обычным операторам If / Else. В следующем запросе, если устаревшее значение = 'N' или If InStock value = 'Y', тогда Output будет 1. В противном случае, вывод будет 0. Затем мы помещаем это 0 или 1 значение в столбец Salable.
источник
If..Then...Else..
заявления вSQL
следующем ....источник
Это будет что-то вроде этого:
источник
SELECT OrderID, Quantity, CASE WHEN Quantity > 30 THEN "The quantity is greater than 30" WHEN Quantity = 30 THEN "The quantity is 30" ELSE "The quantity is under 30" END AS QuantityText FROM OrderDetails WHERE QuantityText = 'The quantity is 30';
Для полноты картины я бы добавил, что в SQL используется трехзначная логика. Выражение:
Может дать три отличных результата:
Например, если товар устарел, но вы не знаете, есть ли товар в наличии, вы не знаете, продается ли товар. Вы можете написать эту трехзначную логику следующим образом:
Как только вы поймете, как это работает, вы можете преобразовать три результата в два, решив поведение null. Например, это будет относиться к null как к нереализуемому:
источник
Мне нравится использование операторов CASE, но вопрос, заданный для оператора IF в SQL Select. То, что я использовал в прошлом, было:
Это как операторы Excel или листов IF, где есть условное условие, за которым следует истинное условие, а затем ложное условие:
Кроме того, вы можете вкладывать операторы if (но для использования следует использовать CASE :-)
(Примечание: это работает в MySQLWorkbench, но может не работать на других платформах)
источник
Вы можете использовать Case Statement:
источник