CASE WHEN 'All'

3

我有一个问题,涉及到存储过程,但我无法解决。我需要应用一个包含5个项目的筛选器,如果其中一个特定项目,则需要返回前面的所有5个项目。

代码大致如下:

...
WHERE [dbo].[ID] = CASE @var
  WHEN 'a' THEN 0
  WHEN 'b' THEN 1
  WHEN 'c' THEN 2
  WHEN 'd' THEN 3
  WHEN 'e' THEN 4
  WHEN 'all' THEN -- return 0 through 4 as possible answers
END

2
一些更多的背景信息可能会有帮助。 - Hart CO
1
“return 0 through 4”是什么意思?是返回一个包含“01234”的字符串吗? :) 请提供样例输出。 - Mosty Mostacho
2
我不明白你如何在ELSE情况下返回5个不同的值,因为你的CASE语句只能返回一个值。 - simdrouin
3
如果在CASE语句中没有表达式,那么WHEN 'a'应该如何工作? - Sergey Kalinichenko
1个回答

5

对于所有的值,您需要添加[dbo].[ID] = [dbo].[ID]条件

WHERE [dbo].[ID] = CASE  @var
  WHEN 'a' THEN 0
  WHEN 'b' THEN 1
  WHEN 'c' THEN 2
  WHEN 'd' THEN 3
  WHEN 'e' THEN 4
  WHEN 'all' THEN [dbo].[ID] 
END

文档中写道:CASE WHEN Boolean_expression THEN result_expression,但这里没有布尔表达式。您可以查看官方文档获取更多信息。 - Mosty Mostacho
1
@MostyMostacho 正如我所说,“我猜示例代码是伪代码”,正如 OP 所说,“代码大致如下”,因此它不是可工作的代码,而是解决问题的思路。 - Robert
1
由于公司政策的限制,这是我能够尽可能接近发布实际代码的方式。 - Matthew Carroll
WHERE [dbo].[ID] = CASE @var WHEN 'a' THEN 0 WHEN 'b' THEN 1 WHEN 'c' THEN 2 WHEN 'd' THEN 3 WHEN 'e' THEN 4 WHEN 'all' THEN [dbo].[ID] END - Matthew Carroll

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接