Во втором случае, почему работает только «IN», а не «=»?
Хан
25
=будет работать, если вы сравниваете с одним значением. Тем не менее, (22978, 23218, 23219)является массивом и INнеобходимо соответствовать только одному из значений.
LdTrigger
2
Это действительно воняет - t-sql не может обработать «или» в выражении case. Давай пора Microsoft вырасти из статуса игрушечной базы данных.
Рич Бьянко
1
"не может обработать" или "в выражении case" ... хммм .... я не думаю, что когда-либо видел переключение, принимающее "или" на любом языке. Казалось бы, победить цель переключения. какие языки принимают "или" в случае?
Хериберто Луго
2
@Heriberto Lugo Я не знаю, сколько языков ты знаешь, но есть хотя бы несколько. VB.NET и C # могут использовать их с простым разделением запятыми. Это ничего не побеждает, так как избавит вас от повторения одного и того же кода в нескольких случаях ни за что.
upvoted - этот ответ добавляет ценность. Это более точно соответствует вопросу OP, и если вы хотите вложить несколько CASE-WHENS, этот синтаксис значительно уменьшает необходимый код.
Мэтт Кемп
1
@Leigh, я ценю этот ответ. Приятно иметь все разные форматы в одном потоке, что делает его более удобным для использования в качестве справочного материала.
Джейсон Уилер
3
@Bigwheels - Вау .. это было некоторое время назад. Я, вероятно, не согласен, потому что, по логике, это точно так же, как другие ответы . Тем не менее, вы и Мэтт делаете правильные очки. Если вопрос был «какой правильный синтаксис с использованием только ИЛИ », это дает ответ. Однако, если целью было «сокращение необходимого синтаксиса», принятый ответ более компактен. Между прочим, это не удар по ответу Даррена, который совершенно справедлив. Просто мои $ 0,02 :)
Вы можете использовать одно из выражений WHEN, но вы не можете смешивать их оба.
КОГДА когда_выражение
Простое выражение, с которым сравнивается input_expression, когда используется простой формат CASE. when_expression - любое допустимое выражение. Типы данных input_expression и каждого when_expression должны быть одинаковыми или неявным преобразованием.
WHEN Boolean_expression
Булево выражение оценивается при использовании искомого формата CASE. Boolean_expression - это любое допустимое логическое выражение.
Вы могли бы запрограммировать:
1.
CASE ProductLineWHEN'R'THEN'Road'WHEN'M'THEN'Mountain'WHEN'T'THEN'Touring'WHEN'S'THEN'Other sale items'ELSE'Not for sale'
Там уже много ответов по поводу CASE. Я объясню, когда и как использовать CASE.
Вы можете использовать выражения CASE в любом месте SQL-запросов. Выражения CASE могут использоваться в операторах SELECT, предложениях WHERE, предложениях по предложениям, предложениях HAVING, операторах Insert, UPDATE и DELETE.
Выражение CASE имеет следующие два формата:
Простое выражение CASE
CASE expressionWHEN expression1 THEN Result1WHEN expression2 THEN Result2ELSE ResultNEND
Это сравнивает выражение с набором простых выражений, чтобы найти результат. Это выражение сравнивает выражение с выражением в каждом предложении WHEN для эквивалентности. Если выражение в предложении WHEN совпадает, будет возвращено выражение в предложении THEN.
Вот где вопрос ОП падает. 22978 OR 23218 OR 23219не получит значение, равное выражению, т.е. ebv.db_no. Вот почему это дает ошибку. Типы данных input_expression и каждого when_expression должны быть одинаковыми или неявным преобразованием.
Искал CASE выражения
CASEWHEN Boolean_expression1 THEN Result1WHEN Boolean_expression2 THEN Result2ELSE ResultNEND
Это выражение оценивает набор логических выражений, чтобы найти результат. Это выражение позволяет сравнивать операторы и логические операторы И / ИЛИ с каждым логическим выражением.
Проголосование из-за включения ELSE Salesполя, которое возвращает значение по умолчанию, если оно не включено в инструкцию case, подходящее для бизнес-запросов.
FoxDeploy
3
select id,phno,case gender
when'G'then'M'when'L'then'F'else'No gender'endas gender
from contacts
Почему вы не объясняете, что здесь делается? Важно дать полные ответы с объяснениями, поскольку некоторым новичкам это может понадобиться, чтобы понять, как это решает проблему
Герхард Барнард
3
UPDATE table_name
SET column_name=CASEWHEN column_name in('value1','value2',.....)THEN'update_value'WHEN column_name in('value1','value2',.....)THEN'update_value'END
table_name = Имя таблицы, над которой вы хотите выполнить операцию.
column_name = Имя столбца / поля, значение которого вы хотите установить.
update_value = Значение, которое вы хотите установить column_name
Хотя этот код может решить проблему ОП, несколько слов объяснения будут еще более полезными для будущих читателей.
Том
-5
Select s.stock_code,s.stock_desc,s.stock_desc_ar,
mc.category_name,s.sel_price,casewhen s.allow_discount=0then'Non Promotional Item'else'Prmotional
item'end'Promotion'From tbl_stock s innerjoin tbl_stock_category c on s.stock_id=c.stock_id
innerjoin tbl_category mc on c.category_id=mc.category_id
where mc.category_id=2and s.isSerialBased=0
Ответы:
Этот формат требует, чтобы вы использовали либо:
В противном случае используйте:
источник
=
будет работать, если вы сравниваете с одним значением. Тем не менее,(22978, 23218, 23219)
является массивом иIN
необходимо соответствовать только одному из значений.источник
IN
ключевого слова намного лучшеисточник
Вы можете использовать одно из выражений WHEN, но вы не можете смешивать их оба.
КОГДА когда_выражение
Простое выражение, с которым сравнивается input_expression, когда используется простой формат CASE. when_expression - любое допустимое выражение. Типы данных input_expression и каждого when_expression должны быть одинаковыми или неявным преобразованием.
WHEN Boolean_expression
Булево выражение оценивается при использовании искомого формата CASE. Boolean_expression - это любое допустимое логическое выражение.
Вы могли бы запрограммировать:
1.
2.
Но в любом случае вы можете ожидать, что переменная ранжирования будет сравниваться в логическом выражении.
См. CASE (Transact-SQL) (MSDN).
источник
Там уже много ответов по поводу
CASE
. Я объясню, когда и как использоватьCASE
.Вы можете использовать выражения CASE в любом месте SQL-запросов. Выражения CASE могут использоваться в операторах SELECT, предложениях WHERE, предложениях по предложениям, предложениях HAVING, операторах Insert, UPDATE и DELETE.
Выражение CASE имеет следующие два формата:
Простое выражение CASE
Это сравнивает выражение с набором простых выражений, чтобы найти результат. Это выражение сравнивает выражение с выражением в каждом предложении WHEN для эквивалентности. Если выражение в предложении WHEN совпадает, будет возвращено выражение в предложении THEN.
Вот где вопрос ОП падает.
22978 OR 23218 OR 23219
не получит значение, равное выражению, т.е. ebv.db_no. Вот почему это дает ошибку. Типы данных input_expression и каждого when_expression должны быть одинаковыми или неявным преобразованием.Искал CASE выражения
Это выражение оценивает набор логических выражений, чтобы найти результат. Это выражение позволяет сравнивать операторы и логические операторы И / ИЛИ с каждым логическим выражением.
1. ВЫБРАТЬ оператор с выражениями CASE
2. Обновление оператора с выражением CASE
Предложение 3.ORDER BY с выражениями CASE
4. Имея предложение с выражением CASE
Надеюсь, что эти варианты использования помогут кому-то в будущем.
Источник
источник
Пытаться
источник
источник
ELSE Sales
поля, которое возвращает значение по умолчанию, если оно не включено в инструкцию case, подходящее для бизнес-запросов.источник
table_name
= Имя таблицы, над которой вы хотите выполнить операцию.column_name
= Имя столбца / поля, значение которого вы хотите установить.update_value
= Значение, которое вы хотите установитьcolumn_name
источник
источник