Функции SQL Server - Конструкция CASE

MS SQL Server

Конструкция CASE

В отличие от других скалярных функций, CASE скорее является синтаксической конструкцией — она рассматривает несколько условий для получения одного результата. В простейшем варианте выражение сравнивается с набором простых выражений. Более сложный вариант (формат CASE с поиском) вычисляет набор логических выражений. Синтаксис функции CASE:

CASE входное_выражение
WHEN выражение_when THEN выражение_результат
[,...n]
[ELSE выражение_результат_else]
END 
-- или –
CASE
WHEN логическое_выражение THEN выражение_результат
[,...n]
[ELSE выражение_результат_else]
END

Функция CASE возвращает результат для первого истинного сравнения. Если ни одно сравнение не является истинным, возвращается результат ELSE. Если секция ELSE отсутствует, возвращается NULL.

Пример простой конструкции CASE

SELECT Category = CASE type
WHEN 'popular_comp' THEN 'Popular Computing'
WHEN 'mod_cook' THEN 'Cooking'
WHEN 'business' THEN 'Business'
WHEN 'psychology' THEN 'Psychology'
WHEN 'trad_cook' THEN 'Cooking'
ELSE 'unknown'
END,
title AS 'Book Title', price
FROM titles
ORDER BY Category

Пример конструкции CASE с поиском

SELECT Category = CASE
WHEN type = 'popular_comp' THEN 'Popular Computing'
WHEN type like '%cook' THEN 'Cooking'
WHEN type = 'business' THEN 'Business'
WHEN type = 'psychology' THEN 'Psychology'
WHEN type = 'trad_cook' THEN 'Cooking'
ELSE 'unknown'
END,
title AS 'Book Title', price
FROM titles
ORDER BY Category

В каждой секции WHEN может выполняться поиск по разным столбцам. Это позволяет сгенерировать столбцы результата на основании сильно отличающихся условий. Впрочем, на практике необходимость в подобных вычислениях возникает крайне редко. В следующем фрагменте показана конструкция CASE с разными столбцами при использовании выражения WHEN:

SELECT Category = CASE
WHEN price IS NULL THEN '!!Unpriced book!!'
WHEN type = 'popular_comp' THEN 'Popular Computing'
WHEN type like '%cook%' THEN 'Cooking'
ELSE 'No Category'
END,
title AS 'Book Title', price
FROM titles
ORDER BY Category


 

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


Защитный код
Обновить