多列的where子句

3

我是这个网站和SQL的新手。需要帮助在MS SQL中构建以下查询。

Select *
From Table1
Where customer = '123' and asofdate = '2012-01-01'

这里是我的问题所在。我需要的数据仅来自上面列出的客户和指定的日期,但我想要检查下面的列,如果有任何数据显示,则显示这些行。
and abc !='0', abcd !='0', abcde !='0', abcdef !='0'

如果我在上一行中使用"or",会显示包括其他客户编号的行;而如果我使用 "and",则不会显示任何行。

3个回答

6

如果我理解您的要求正确,您可以使用括号将布尔逻辑分组为子表达式,例如:

Select * From Table1 Where customer = '123' and asofdate = '2012-01-01' and (abc != 0 OR abcd != 0 OR abcde != 0 OR abdcdef != 0)

这可能相当于

WHERE true and true and (true or false or false or false)

这将导致结果为“true” - 例如,括号中的一些OR测试可能会失败,但只要其中一个为真,则整个结果为真,因此被过滤到结果集中。
注意:不要在数值上使用引号-它们只应用于字符串(或日期)。

1
您可以在 WHERE 语句中使用括号:
WHERE customer = '123' and asofdate = '2012-01-01' and
      (abc !='0' or abcd !='0' or abcde !='0' or abcdef !='0')

1

您只需要使用AND和括号添加条件:

Select *
From Table1
Where (customer = '123' and asofdate = '2012-01-01')
    AND (abc !='0' OR abcd !='0' OR abcde !='0' OR abcdef !='0')

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