В SQL Server 2012 для этого можно использовать функцию IIF
.
SELECT IIF(Obsolete = 'N' OR InStock = 'Y', 1, 0) AS Salable, *
FROM Product
Это фактически просто сокращенный (хотя и не стандартный SQL) способ написания CASE
.
Я предпочитаю лаконичность по сравнению с расширенной CASE
версией.
И IIF()
, и CASE
разрешаются как выражения внутри оператора SQL и могут использоваться только в четко определенных местах.
Выражение CASE нельзя использовать для управления потоком выполнения
Операторы Transact-SQL, блоки операторов, пользовательские функции и
хранимые процедуры.
Если ваши потребности не могут быть удовлетворены этими ограничениями (например, необходимость возвращать наборы результатов различной формы в зависимости от какого-либо условия), то SQL Server также имеет процедурное ключевое слово IF
. 1026 *
IF @IncludeExtendedInformation = 1
BEGIN
SELECT A,B,C,X,Y,Z
FROM T
END
ELSE
BEGIN
SELECT A,B,C
FROM T
END
Однако при таком подходе иногда необходимо соблюдать осторожность, чтобы избежать проблем с анализом параметров .