我想基于其他列的值在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
答案 0 :(得分:3)
只需使用AND
和OR
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
不等于任何内容。