6

OR не поддерживается в выражении CASE в SQL Server

14

Описание проблемы

Я пытаюсь использовать оператор <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 ответ(ов)

11

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

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 

Выбор подходящего варианта зависит от ваших предпочтений и читаемости кода.

2

В приведенном вами SQL-коде используется конструкция CASE для определения значения столбца wecs_system в зависимости от значения db_no в таблице ebv.

Вот более подробное объяснение:

  1. Условие: В блоке WHEN проверяются три условия: если db_no равно 22978, 23218 или 23219.
  2. Результат: Если одно из условий выполняется, то wecs_system получает значение 'WECS 9500'.
  3. Иначе: Если ни одно из условий не выполняется, то 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;

Если у вас есть дополнительные вопросы, пожалуйста, уточните!

0

Чтобы перевести данный 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 будет содержать одно из двух возможных значений в зависимости от условия.

0

Вы можете использовать конструкцию 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.

0

В данном 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 Информация_о_Магазинах;

Пожалуйста, дайте знать, если нужны дополнительные пояснения!

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь