18

Как выполнить IF...THEN в SQL SELECT?

11

Как выполнить оператор IF...THEN в операторе SQL SELECT?

Например:

SELECT IF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Saleable, * FROM Product

Вопрос заключается в том, как правильно использовать условные операторы в запросах SQL для получения нужного результата.

5 ответ(ов)

3

В данной ситуации оператор CASE будет вашим другом и имеет две формы:

Простой оператор CASE:

SELECT CASE <переменная> WHEN <значение>      THEN <значение_возврата>
                         WHEN <другое_значение> THEN <возвратите_это>
                                           ELSE <возврат_по_умолчанию>
       END AS <название_нового_столбца>
FROM <таблица>

Расширенный оператор CASE:

SELECT CASE WHEN <условие>      THEN <значение_возврата>
            WHEN <другое_условие> THEN <возвратите_это>
                             ELSE <возврат_по_умолчанию>
       END AS <название_нового_столбца>
FROM <таблица>

Кроме того, вы можете использовать операторы CASE в предложении ORDER BY для более изящной сортировки.

0

Вот пример использования оператора CASE в SQL для определения значения столбца Salable на основе значения столбца Obsolete:

SELECT 
    CASE 
        WHEN Obsolete = 'N' THEN 1
        ELSE 0 
    END AS Salable
FROM YourTableName;

В данном запросе, если значение столбца Obsolete равно 'N', то в результате в столбце Salable будет 1, в противном случае — 0. Не забудьте заменить YourTableName на имя вашей таблицы.

0

Этот запрос SQL выбирает все столбцы из таблицы Product, а также добавляет новый столбец с именем Salable, который определяется с помощью конструкции CASE.

Если поле Obsolete равно 'N' (неустаревший) или поле InStock равно 'Y' (в наличии), то в новом столбце будет значение 'YES'. В противном случае, если оба условия не выполнены, будет возвращено значение 'NO'.

Пример запроса на русском:

SELECT  
(CASE 
     WHEN (Obsolete = 'N' OR InStock = 'Y') THEN 'YES'
     ELSE 'NO' 
 END) as Salable
, * 
FROM Product

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

0

В вашем SQL-запросе есть ошибка синтаксиса, так как после * не должно быть запятой. Кроме того, вы используете CASE для создания нового поля Salable на основе значений других полей. Вот корректированная версия:

SELECT
   CASE 
      WHEN OBSOLETE = 'N' OR InStock = 'Y' THEN 'TRUE' 
      ELSE 'FALSE' 
   END AS Salable,
   *
FROM PRODUCT

В этом запросе производится выборка всех записей из таблицы PRODUCT. Поле Salable будет содержать значение 'TRUE', если продукт не устарел (OBSOLETE = 'N') или находится на складе (InStock = 'Y'). В противном случае поле будет содержать значение 'FALSE'.

Обратите внимание, что символы * выберут все другие поля из таблицы PRODUCT вместе с вычисленным полем Salable. Если это именно то, что вам нужно, то данный запрос верен.

0

В Microsoft SQL Server (T-SQL), чтобы использовать условную логику в запросах, вы можете применять выражение CASE.

Для написания условного оператора в SELECT, вы можете использовать следующий код:

SELECT CASE 
           WHEN Obsolete = 'N' OR InStock = 'Y' THEN 'YES' 
           ELSE 'NO' 
       END AS Result
FROM YourTable;

Это выражение проверяет, если значение поля Obsolete равно 'N' или InStock равно 'Y', то возвращается 'YES', в противном случае – 'NO'.

Для фильтрации данных в предложении WHERE, вы можете использовать решение следующего вида:

SELECT *
FROM YourTable
WHERE 1 = CASE 
             WHEN Obsolete = 'N' OR InStock = 'Y' THEN 1 
             ELSE 0 
           END;

В этом случае, условие проверяет аналогично: строки будут возвращены только в том случае, если хотя бы одно из условий (обозначающее, что элемент не устарел или на складе есть товар) истинно. Если оба условия ложны, условие не выполнится, и запись не будет включена в результаты запроса.

Таким образом, вы можете управлять выборкой данных в зависимости от состояния полей в таблице.

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