SQL Server: CASE КОГДА ИЛИ ТОГДА ELSE END => OR не поддерживается

OR в предложении WHEN оператора CASE не поддерживается. Как я могу это сделать?

 CASE ebv.db_no WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500' ELSE 'WECS 9520' END as wecs_system 

Этот формат требует, чтобы вы использовали:

 CASE ebv.db_no WHEN 22978 THEN 'WECS 9500' WHEN 23218 THEN 'WECS 9500' WHEN 23219 THEN 'WECS 9500' ELSE 'WECS 9520' END as wecs_system 

В противном случае используйте:

 CASE WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500' ELSE 'WECS 9520' END as wecs_system 
 CASE WHEN ebv.db_no = 22978 OR ebv.db_no = 23218 OR ebv.db_no = 23219 THEN 'WECS 9500' ELSE 'WECS 9520' END as wecs_system 
 CASE WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500' ELSE 'WECS 9520' END as wecs_system 

Вы можете использовать одно из выражений, которое WHEN имеет, но вы не можете их смешивать.

  1. КОГДА when_expression

    Является простым выражением, с которым сравнивается input_expression, когда используется простой формат CASE. when_expression – любое допустимое выражение. Типы данных input_expression и each when_expression должны быть одинаковыми или должны быть неявным преобразованием.

  2. WHEN Boolean_expression

    Вычисляется ли булево выражение при использовании искомого формата CASE. Boolean_expression – любое допустимое булево выражение.

Вы можете запрограммировать:

1.

  CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN 'Mountain' WHEN 'T' THEN 'Touring' WHEN 'S' THEN 'Other sale items' ELSE 'Not for sale' 

2.

  CASE WHEN ListPrice = 0 THEN 'Mfg item - not for resale' WHEN ListPrice < 50 THEN 'Under $50' WHEN ListPrice >= 50 and ListPrice < 250 THEN 'Under $250' WHEN ListPrice >= 250 and ListPrice < 1000 THEN 'Under $1000' ELSE 'Over $1000' END 

Но в любом случае вы можете ожидать, что ранжирование переменных будет сравниваться в булевом выражении.

См. CASE (Transact-SQL) (MSDN).

Пытаться

 CASE WHEN ebv.db_no IN (22978,23218,23219) THEN 'WECS 9500' ELSE 'WECS 9520' END 
 SELECT Store_Name, CASE Store_Name WHEN 'Los Angeles' THEN Sales * 2 WHEN 'San Diego' THEN Sales * 1.5 ELSE Sales END AS "New Sales", Txn_Date FROM Store_Information; 

В отношении CASE уже много ответов. Я объясню, когда и как использовать CASE .

Вы можете использовать выражения CASE в любом месте SQL-запросов. Выражения CASE могут использоваться в операторе SELECT, предложения WHERE, предложения Order by, предложения HAVING, инструкции Insert, UPDATE и DELETE.

Выражение CASE имеет следующие два формата:

  1. Простое выражение CASE

     CASE expression WHEN expression1 THEN Result1 WHEN expression2 THEN Result2 ELSE ResultN END 

    Это сравнивает выражение с набором простых выражений, чтобы найти результат. Это выражение сравнивает выражение с выражением в каждом предложении WHEN для эквивалентности. Если выражение в предложении WHEN будет согласовано, выражение в предложении THEN будет возвращено.

    Здесь вопрос ОП падает. 22978 OR 23218 OR 23219 не получит значение, равное выражению ie ebv.db_no. Вот почему он дает ошибку. Типы данных input_expression и each when_expression должны быть одинаковыми или должны быть неявным преобразованием.

  2. Искаженные выражения CASE

     CASE WHEN Boolean_expression1 THEN Result1 WHEN Boolean_expression2 THEN Result2 ELSE ResultN END 

    Это выражение оценивает набор булевых выражений, чтобы найти результат. Это выражение позволяет операторам сравнения и логическим операторам AND / OR с каждым булевым выражением.

Инструкция 1.SELECT с выражениями CASE

 --Simple CASE expression: SELECT FirstName, State=(CASE StateCode WHEN 'MP' THEN 'Madhya Pradesh' WHEN 'UP' THEN 'Uttar Pradesh' WHEN 'DL' THEN 'Delhi' ELSE NULL END), PayRate FROM dbo.Customer -- Searched CASE expression: SELECT FirstName,State=(CASE WHEN StateCode = 'MP' THEN 'Madhya Pradesh' WHEN StateCode = 'UP' THEN 'Uttar Pradesh' WHEN StateCode = 'DL' THEN 'Delhi' ELSE NULL END), PayRate FROM dbo.Customer 

Оператор 2.Update с выражением CASE

 -- Simple CASE expression: UPDATE Customer SET StateCode = CASE StateCode WHEN 'MP' THEN 'Madhya Pradesh' WHEN 'UP' THEN 'Uttar Pradesh' WHEN 'DL' THEN 'Delhi' ELSE NULL END -- Simple CASE expression: UPDATE Customer SET StateCode = CASE WHEN StateCode = 'MP' THEN 'Madhya Pradesh' WHEN StateCode = 'UP' THEN 'Uttar Pradesh' WHEN StateCode = 'DL' THEN 'Delhi' ELSE NULL END 

Предложение 3.ORDER BY с выражениями CASE

 -- Simple CASE expression: SELECT * FROM dbo.Customer ORDER BY CASE Gender WHEN 'M' THEN FirstName END Desc, CASE Gender WHEN 'F' THEN LastName END ASC -- Searched CASE expression: SELECT * FROM dbo.Customer ORDER BY CASE WHEN Gender='M' THEN FirstName END Desc, CASE WHEN Gender='F' THEN LastName END ASC 

4. Предложение с выражением CASE

 -- Simple CASE expression: SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate) FROM dbo.Customer GROUP BY StateCode,Gender,FirstName HAVING (MAX(CASE Gender WHEN 'M' THEN PayRate ELSE NULL END) > 180.00 OR MAX(CASE Gender WHEN 'F' THEN PayRate ELSE NULL END) > 170.00) -- Searched CASE expression: SELECT FirstName ,StateCode,Gender, Total=MAX(PayRate) FROM dbo.Customer GROUP BY StateCode,Gender,FirstName HAVING (MAX(CASE WHEN Gender = 'M' THEN PayRate ELSE NULL END) > 180.00 OR MAX(CASE WHEN Gender = 'F' THEN PayRate ELSE NULL END) > 170.00) 

Надеюсь, что эти варианты использования помогут кому-то в будущем.

Источник

 UPDATE table_name SET column_name=CASE WHEN column_name in ('value1', 'value2',.....) THEN 'update_value' WHEN column_name in ('value1', 'value2',.....) THEN 'update_value' END 
 Select s.stock_code,s.stock_desc,s.stock_desc_ar, mc.category_name,s.sel_price, case when s.allow_discount=0 then 'Non Promotional Item' else 'Prmotional item' end 'Promotion' From tbl_stock s inner join tbl_stock_category c on s.stock_id=c.stock_id inner join tbl_category mc on c.category_id=mc.category_id where mc.category_id=2 and s.isSerialBased=0 
  • SQL: правильно использовать оператор case?
  • Корпус коммутатора в SQL Server 2012
  • Оператор case в sqlserver в where where с else, как всегда, true
  • Заявление о ситуации в SQL Server
  • Использование «как» внутри оператора «case» с двумя разными полями
  • SQL-запрос: создать столбец категории на основе столбца varchar в таблице, содержащей конкретные значения
  • В списке выбора может быть указано только одно выражение, когда подзапрос не вводится с вложенными аргументами EXISTS
  • Вставить разрыв строки в результате выполнения оператора case SQL
  • Выражение случая с несколькими условиями и совокупными функциями
  • T-SQL Возвращаемый текст в CASE с цифровой проверкой
  • Переименование категорий результатов в SQL
  • Давайте будем гением компьютера.