OR не поддерживается в выражении CASE в SQL Server
Описание проблемы
Я пытаюсь использовать оператор <code>OR</code>
в cláusule <code>WHEN</code>
выражения <code>CASE</code>
, но получаю сообщение об ошибке, поскольку данная конструкция не поддерживается.
Вот пример кода, который я использую:
CASE ebv.db_no
WHEN 22978 OR 23218 OR 23219 THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Мне нужно выполнить логику, которая позволит вернуть значение 'WECS 9500', если значение <code>ebv.db_no</code>
равно 22978, 23218 или 23219. Как мне правильно переписать это выражение без использования оператора <code>OR</code>
?
5 ответ(ов)
Этот формат требует использовать либо:
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
Выбор подходящего варианта зависит от ваших предпочтений и читаемости кода.
В приведенном вами SQL-коде используется конструкция CASE
для определения значения столбца wecs_system
в зависимости от значения db_no
в таблице ebv
.
Вот более подробное объяснение:
- Условие: В блоке
WHEN
проверяются три условия: еслиdb_no
равно 22978, 23218 или 23219. - Результат: Если одно из условий выполняется, то
wecs_system
получает значение 'WECS 9500'. - Иначе: Если ни одно из условий не выполняется, то
wecs_system
будет иметь значение 'WECS 9520'.
Следовательно, ваш SQL запрос определяет, какой тип системы WECS (Wind Energy Conversion System) будет назначен на основе номера базы данных. Полный код будет работать в SQL-запросе и возвращать нужное значение в зависимости от условия.
Пример запроса:
SELECT
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
FROM ebv;
Если у вас есть дополнительные вопросы, пожалуйста, уточните!
Чтобы перевести данный SQL-код на русский, отвечая на вопрос в стиле StackOverflow, можно написать следующее:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END as wecs_system
Этот код представляет собой конструкцию CASE
, которая используется для условной логики в SQL. В данном случае, если значение ebv.db_no
содержится в списке (22978, 23218, 23219), то столбец wecs_system
получит значение 'WECS 9500'. Если значение ebv.db_no
не входит в этот список, то будет присвоено значение 'WECS 9520'.
Таким образом, wecs_system
будет содержать одно из двух возможных значений в зависимости от условия.
Вы можете использовать конструкцию CASE
в SQL для выбора значения в зависимости от условий. В вашем примере, если значение ebv.db_no
находится в списке (22978, 23218, 23219), то будет возвращено 'WECS 9500'; в противном случае будет возвращено 'WECS 9520'. Вот корректный синтаксис:
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END
Это выражение может использоваться в SELECT-запросе, чтобы возвращать разные значения в зависимости от db_no
. Например:
SELECT
ebv.db_no,
CASE
WHEN ebv.db_no IN (22978, 23218, 23219) THEN 'WECS 9500'
ELSE 'WECS 9520'
END AS model
FROM
your_table_name ebv;
Здесь model
будет содержать 'WECS 9500' или 'WECS 9520' в зависимости от значения db_no
.
В данном SQL-запросе реализован выбор данных из таблицы Store_Information
, где указаны названия магазинов, новые значения продаж и дата транзакции. Используется конструкция CASE
для изменения значений продаж в зависимости от названия магазина. Если магазин находится в Лос-Анджелесе, продажи удваиваются (Sales * 2
), если в Сан-Диего — увеличиваются на 50% (Sales * 1.5
), в остальных случаях продажи остаются неизменными. Результатом выполнения этого запроса будет таблица с тремя колонками: название магазина (Store_Name
), новые продажи (New Sales
) и дата транзакции (Txn_Date
).
Вот как будет выглядеть запрос на русском:
SELECT
Название_Магазина,
CASE Название_Магазина
WHEN 'Лос-Анджелес' THEN Продажа * 2
WHEN 'Сан-Диего' THEN Продажа * 1.5
ELSE Продажа
END AS "Новые Продажи",
Дата_Транзакции
FROM Информация_о_Магазинах;
Пожалуйста, дайте знать, если нужны дополнительные пояснения!
Как выполнить IF...THEN в SQL SELECT?
"Вставка результатов хранимой процедуры в временную таблицу"
Как выполнить оператор UPDATE с JOIN в SQL Server?
Возможно ли задать условия в Count()?
Для чего действительно нужен SQL-тип данных национального символа (NCHAR)?