where子句中的case语句,其中"不等于"条件

时间:2014-03-12 00:54:03

标签: sql sql-server

这只是我实际查询的一个非常简单的版本,我想知道如何只为一个查询而不是两个查询来进行以下选择?

 If @ShowZero = 0 
     Select Value From Metrics 
 Else
     Select Value From Metrics Where Value <> 0

我尝试了一些事情

  Select Value From Metrics Where Value = Case @ShowZero = 0 then Value Else (here I'm stuck).

@ShowZero是0和1的标志。

谢谢!

1 个答案:

答案 0 :(得分:3)

您不需要case

Select Value
From Metrics 
Where @ShowZero = 0 or Value <> 0;

编辑:

这是有效的,因为,呃,这就是布尔逻辑的工作原理。换句话说,如果你为表达式做了一个逻辑表,它看起来像:

@ShowZero    Value       Action
   0           0         Show row
   0         other       Show row
 other         0         Filter out row
 other       other       Show row

有多种表达方式。 if语句就是其中之一。您可以说:&#34;我要显示一行,除非@ShowZero不是0 值是0&#34;。 where子句将是:

where not (@ShowZero <> 0 and Value = 0)

或者,您可以说:&#34;当以下任何一种情况属实时,我会显示一行:

  • @ShowZero = 0
  • Value <> 0

如果两者都真的很棒!我还会显示这一行。&#34;这是我使用的where子句。