Подтвердить что ты не робот

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 
4b9b3361

Ответ 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]