Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 在CASE语句中使用而不重复输入表达式?_Sql Server_Tsql_Case - Fatal编程技术网

Sql server 在CASE语句中使用而不重复输入表达式?

Sql server 在CASE语句中使用而不重复输入表达式?,sql-server,tsql,case,Sql Server,Tsql,Case,当使用CASE语句时,我意识到,根据,我可以使用简单的CASE表达式,使用input\u表达式和成对的When\u表达式和result\u表达式值(在这些示例中,假设myField中的值始终是正整数): 或者我可以使用搜索的大小写表达式,以及成对的布尔表达式和结果表达式值: CASE WHEN [Boolean_expression] THEN [result_expression] ... ELSE [result_expression] END CASE

当使用
CASE
语句时,我意识到,根据,我可以使用简单的
CASE
表达式,使用
input\u表达式
和成对的
When\u表达式
result\u表达式
值(在这些示例中,假设
myField
中的值始终是正整数):

或者我可以使用搜索的
大小写
表达式,以及成对的
布尔表达式
结果表达式
值:

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
运算符用作任何
布尔_表达式
的一部分:

CASE
    WHEN myField IN (1,2) THEN 'One or two'
    WHEN myField = 3 THEN 'Three'
    ELSE 'More than three'
END
真正有用的是在编写简单的
CASE
表达式时能够使用
IN
运算符,如:

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
但这不会运行,并给出错误:

关键字“IN”附近的语法不正确

显然,我上面的示例是人为设计的,但是有没有办法编写一个简单的
CASE
表达式,并在
操作符中使用


通过阅读MSDN上的语法,我了解到这似乎是不可能的,因为简单的
案例
表达式是如何形成的-将
输入表达式
与每个
when\u表达式
进行比较,以确保相等-但我只是想知道是否有什么方法可以实现我的要求,因为在每个
when
已搜索的
案例
表达式的子句。

否,这是不可能的。文档区分了when_表达式和Boolean_表达式。when_表达式始终使用相等运算符

Aaron Bertrand在他的书中描述了这样的表达

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_表达式替换比较运算符。这仅适用于您已经提到的布尔_表达式:

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

不,这是不可能的。文档区分了when_表达式和Boolean_表达式。when_表达式始终使用相等运算符

Aaron Bertrand在他的书中描述了这样的表达

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_表达式替换比较运算符。这仅适用于您已经提到的布尔_表达式:

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

不。它没有那样的语法。最接近的是你的第三个例子。它没有那样的语法。最接近它的是你的第三个例子