Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.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 where子句在相同值上具有多个条件_Sql_Sql Server 2008 - Fatal编程技术网

SQL where子句在相同值上具有多个条件

SQL where子句在相同值上具有多个条件,sql,sql-server-2008,Sql,Sql Server 2008,我想根据其他列的值在SQL中应用不同的where条件,如下所示。 对不起,我正在更新我的que,有更具体的要求 SELECT * FROM TABLEDetails WHERE CASE WHEN ConfigValue = 'FALSE' THEN (ConfigAmount != 0 OR ConfigVolume != 0) WHEN ConfigValue = 'TRUE' THEN (ConfigAmount !=

我想根据其他列的值在SQL中应用不同的where条件,如下所示。 对不起,我正在更新我的que,有更具体的要求

SELECT * FROM TABLEDetails 
WHERE CASE WHEN 
    ConfigValue = 'FALSE' THEN 
               (ConfigAmount != 0 OR ConfigVolume != 0)
    WHEN ConfigValue = 'TRUE' THEN
         (ConfigAmount != 0  OR ConfigVolume <Here, it should allow Zero too with other values>
    END
只需使用ANDs和ORs:

返回结果表达式时的大小写,并且查询中没有类似的比较

如@Pred所述,WHERE子句必须包含比较

在你的编辑完全改变了需求之后,顺便说一句,我想这样的事情可能会奏效,但问题现在还不清楚:

SELECT * FROM TABLEDetails 
WHERE (ConfigValue = 'FALSE' AND (ConfigAmount != 0 OR ConfigVolume != 0))
   OR (ConfigValue = 'TRUE' AND  (ConfigAmount != 0 OR ConfigVolume IN (0, 1, 2, ... /* add as many values you need*/)))

@X.L.Ant写了一个正确而优秀的答案,但却完成了可能的解决方案列表。下面是一个CASE..WHEN子句:


请注意,如果不存在ELSE条件和WHEN条件,CASE..WHEN子句将返回NULL。这将过滤ConfigValue<0为true的所有记录,因为NULL不等于任何值。

不,您可以在where子句中使用CASE..,但您必须将子句的reult与另一个表达式(如列或常量值)进行比较。原始查询的主要问题是WHERE子句不包含压缩。@Pred是的,我知道,你写评论时我正在编辑…:你的编辑完全改变了你的问题。现在我都不明白你想要什么了。请提供示例数据和预期结果。我有ConfigValue为“True”和“False”的表conatins ConfigAmount和ConfigVolume。如果ConfigValue为“False”,则ConfigVolume中不允许0。在这两种情况下,ConfigAmount中都不允许0。我明白了,对于其他值也允许0是什么意思?允许0和其他一些值,或者允许所有值?另外,您应该避免这样污损您的问题,特别是当答案已经存在时。否则,答案会变得不准确,并可能使未来的读者感到困惑。我是否允许0与其他值一起使用。逻辑相同@X.L.Ant的答案更具可读性,更易于维护。我建议您尝试根据您的新要求修改他的查询。
SELECT * FROM TABLEDetails 
WHERE (ConfigValue = 'FALSE' AND (ConfigAmount != 0 OR ConfigVolume != 0))
   OR (ConfigValue = 'TRUE' AND  (ConfigAmount != 0 OR ConfigVolume IN (0, 1, 2, ... /* add as many values you need*/)))
SELECT
  *
FROM
  TABLEDetails 
WHERE
  ConfigValue = CASE
        WHEN ConfigVolume != 0 THEN 'FALSE'
        WHEN ConfigVolume = 0 THEN 'TRUE'
    END