SQL where子句相同值的多个条件

时间:2014-09-11 13:14:00

标签: sql sql-server-2008

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

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

2 个答案:

答案 0 :(得分:3)

只需使用ANDOR s:

SELECT * FROM TABLEDetails 
WHERE (ConfigValue = 'FALSE' AND ConfigVolume != 0)
   OR (ConfigValue = 'TRUE'  AND ConfigVolume = 0)

CASE WHEN会返回结果表达式,而不会像查询中那样进行比较。

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

请参阅MSDN

编辑完成后(完全改变了BTW的要求),我猜这样的事情可行,但现在的问题还不清楚:

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*/)))

答案 1 :(得分:1)

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

SELECT
  *
FROM
  TABLEDetails 
WHERE
  ConfigValue = CASE
        WHEN ConfigVolume != 0 THEN 'FALSE'
        WHEN ConfigVolume = 0 THEN 'TRUE'
    END

请注意,如果没有CASE..WHEN条件且NULL条件均未满足,ELSE子句将返回WHEN。 (这将过滤ConfigValue < 0为真的所有记录,因为NULL不等于任何内容。