2016-12-30 6 views
0

При использовании CASE заявления, я понимаю, что в соответствии с documentation я могу либо использовать простую CASE выражения, с input_expression и парами when_expression и result_expression значений (предположит, что в этих примерах, что значения в myField всегда положительные целые числа):Использование IN в операторе CASE без повторения входного выражения?

CASE [input_expression] 
    WHEN [when_expression] THEN [result_expression] 
    ... 
    ELSE [result_expression] 
END 


CASE myField 
    WHEN 1 THEN 'One' 
    WHEN 2 THEN 'Two' 
    WHEN 3 THEN 'Three' 
    ELSE 'More than three' 
END 

или я могу использовать искали CASE выражение, с парами Boolean_expression и result_expression значения:

CASE 
    WHEN [Boolean_expression] THEN [result_expression] 
    ... 
    ELSE [result_expression] 
END 


CASE 
    WHEN myField = 1 THEN 'One' 
    WHEN myField = 2 THEN 'Two' 
    WHEN myField = 3 THEN 'Three' 
    ELSE 'More than three' 
END 

Я также знаю, что я могу использовать оператор IN как часть любого Boolean_expression при написании искало CASE выражения:

CASE 
    WHEN myField IN (1,2) THEN 'One or two' 
    WHEN myField = 3 THEN 'Three' 
    ELSE 'More than three' 
END 

Что было бы действительно полезно было бы иметь возможность использовать оператор IN при написании простого CASE выражение, как:

CASE myField 
    WHEN IN (1,2,3) THEN 'Between one and three' 
    WHEN IN (4,5,6) THEN 'Between four and six' 
    WHEN IN (7,8,9) THEN 'Between seven and nine' 
    ELSE 'More than nine' 
END 

Но это не будет работать, и выдает ошибку:

Incorrect syntax near the keyword 'IN'.

Очевидно, что мой пример выше надуман, но есть ли способ написать простое выражение CASE, а также использовать оператор IN?

Я понимаю, от чтения синтаксиса MSDN, что кажется, что это не возможно, из-за того, как формируется простая CASE выражения - сравнивая input_expression каждого when_expression равенства - но я просто подумал, что есть любой вид пути для достижения того, что я прошу, поскольку было бы удобно сохранять одно и то же имя поля снова и снова в каждом предложении WHEN искомого выражения CASE.

+3

Неа. У этого нет синтаксиса. Ближе всего это ваш третий пример – GurV

ответ

2

Нет, это невозможно. Документация различает между when_expression и Boolean_expression. Значение when_expression всегда использует оператор равенства.

Aaron Bertrand описал это в своем Dirty Secrets of the CASE expression, что выражение как этот

SELECT CASE @variable 
    WHEN 1 THEN 'foo' 
    WHEN 2 THEN 'bar' 
END 

вычисляет

SELECT 
    WHEN @variable = 1 THEN 'foo' 
    WHEN @variable = 2 THEN 'bar' 
END 

Таким образом, нет никакого способа, чтобы заменить оператор сравнения, используя when_expression. Это возможно только с Boolean_expression как вы уже упоминалось:

SELECT 
    WHEN @variable IN (1,2) THEN 'foo' 
    WHEN @variable in (3,4) THEN 'bar' 
END 

 Смежные вопросы

  • Нет связанных вопросов^_^