SQL Server - описание дела
Я почти уверен, что вы не можете сделать это в контексте оператора case, и я не смог найти документацию об этом, но можно ли сделать следующее:
SELECT CASE WHEN testValue > 2
THEN testValue(Without Repeating it) ELSE FailValue)
END
FROM Table
Более подробный пример:
Select CASE WHEN (Foo-stuff+bar) > 2
THEN Conditional statement without >2 Else "Fail"
END
FROM TABLE
Я ищу способ создать выбор без повторения условного запроса.
EDIT: Из-за плохого примера с моей стороны и отсутствия ответов я искал:
testValue = (Table.A / Table.B) * Table.C Table.D
SELECT CASE WHEN testValue > 2
THEN testValue ELSE FailValue)
END
FROM Table
Ответы
Ответ 1
Таким образом
DECLARE @t INT=1
SELECT CASE
WHEN @t>0 THEN
CASE
WHEN @t=1 THEN 'one'
ELSE 'not one'
END
ELSE 'less than one'
END
EDIT:
Поразмыслив над вопросом, я думаю, что лучшим вариантом является создание функции, которая вычисляет значение. Таким образом, если вы в конечном итоге имеете несколько мест, где нужно выполнить расчет, у вас есть только одна точка для поддержания логики.
Ответ 2
Запрос можно записать немного проще, например:
DECLARE @T INT = 2
SELECT CASE
WHEN @T < 1 THEN 'less than one'
WHEN @T = 1 THEN 'one'
ELSE 'greater than one'
END T
Ответ 3
Я ищу способ создать выбор без повторения условного запроса.
Я предполагаю, что вы не хотите повторять Foo-stuff+bar
. Вы можете привести ваш расчет в производную таблицу:
SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END
FROM (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable) AS a
Обычное табличное выражение будет работать также:
WITH a AS (SELECT (Foo-stuff+bar) AS TestValue FROM MyTable)
SELECT CASE WHEN a.TestValue > 2 THEN a.TestValue ELSE 'Fail' END
FROM a
Кроме того, каждая часть вашего коммутатора должна возвращать один и тот же тип данных, поэтому вам может понадобиться сделать один или несколько случаев.
Ответ 4
Мы можем использовать оператор case Как это сделать
select Name,EmailId,gender=case
when gender='M' then 'F'
when gender='F' then 'M'
end
from [dbo].[Employees]
Мы также можем это сделать.
select Name,EmailId,case gender
when 'M' then 'F'
when 'F' then 'M'
end
from [dbo].[Employees]