CoderNotes - заметки программиста

Публикации  »  Базы данных, T-SQL
Скидка 65% на Skillbox

Получите скидку 65% на любой курс программирования на популярной образовательной платформе Skillbox!

Подробнее
Бесплатный хостинг + SSL-сертификат

Зарегистрируйте домен и получите 2 месяца бесплатного хостинга и SSL-сертификат на 1 год в подарок

Подробнее

Выбор поля в зависимости от условия в SQL-запросе

Иногда бывает нужно, чтобы в sql-запросе в случае выполнения условия происходила выборка по одному полю (или выражению), а в противном случае происходила выборка другого поля (или выражения), т.е. выбор поля или выражения в зависимости от условия. Либо, необходимо обновить значения в базе данных в зависимости от условия. Для решения этой задачи нужно использовать оператор CASE. У этого оператора есть 2 варианта синтаксиса, каждый из которых удобен в своих случаях. Просто приведу наглядные примеры обоих способов.

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

SELECT   ProductNumber, Category =
      CASE ProductLine
         WHEN 'R' THEN 'Road'
         WHEN 'M' THEN 'Mountain'
         WHEN 'T' THEN 'Touring'
         WHEN 'S' THEN 'Other sale items'
         ELSE 'Not for sale'
      END,
   Name
FROM Production.Product
ORDER BY ProductNumber

В данном примере всё просто: если ProductLine = 'R', то в выборке результатов будет текст "Road", если ProductLine = 'M' - тогда получим в результатах "Mountain" и т.д.

Пример 2. Более сложное условие для получения разного текста в зависимости от значения в поле.

SELECT   ProductNumber, Name, 'Price Range' = 
      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
FROM Production.Product
ORDER BY ProductNumber

Пример 3. Использование конструкции наподобие "IF THEN ELSE" в запросе

SELECT FirstName, LastName, TelephoneNumber, 
     CASE
          WHEN TelephoneSpecialInstructions IS NULL 
          THEN 'Any time'
          ELSE TelephoneSpecialInstructions
     END 
     AS WhenContact
FROM Person.vAdditionalContactInfo

Пример 4. Использование условия при сортировке результатов запроса в ORDER BY

SELECT EmployeeID, EmployeeFIO, SalariedFlag
FROM Employee
ORDER BY CASE WHEN SalariedFlag = 1 THEN EmployeeID
              WHEN SalariedFlag = 0 THEN EmployeeFIO 
         END

Принцип сортировки с условием в том, что сначала будут получены все значения в зависимости от условия (т.е. будет получено доп.поле), после чего весь результат запроса будет отсортирован по результатам выполнения условия. Именно поэтому, результаты выполнения условия должны быть одинакового типа данных.

Пример 5. Обновление поля новыми данными в зависимости от условия.

UPDATE Employee
SET VacationHours = 
    CASE
        WHEN VacationHours < 10 
        THEN VacationHours + 40
        ELSE VacationHours + 20
    END
OUTPUT Deleted.EmployeeID, 
       Deleted.VacationHours AS BeforeValue, 
       Inserted.VacationHours AS AfterValue
WHERE SalariedFlag = 0

В этом примере к полю VacationHours добавляется 40, если VacationHours меньше 10, иначе добавляется 20. После выполнения обновлений запрос так же выведет таблицу с колонками EmployeeID и значением поля VacationHours "До" и "После" обновления.

Информация для статьи взята с сайта microsoft

 

Категория: Базы данных, T-SQL

Книги по теме:

Алан Бьюли

Изучаем SQL

Посмотреть все книги по программированию

Комментарии к статье:

01.08.18   Гость Спасибо
28.10.19   Виктор Спасибо
31.03.21   Дмитрий Спасибо
18.04.21   Не гость Спасибо
15.06.21   Гость Спасибо
15.06.21   Друг гостя Согласен с предыдущем оратором
01.12.23   Друг друга гостя Соглашусь со всеми вышесказанными

Добавить комментарий: