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
不。它没有那样的语法。最接近的是你的第三个例子。它没有那样的语法。最接近它的是你的第三个例子