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"在上面的行之间使用它会带来线条,即使有其他客户号码,如果我输入“和”它不会给我带来任何线条。

4

3 回答 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)

这导致“真” - 例如括号中的某些 ORed 测试可能会失败,但只要其中一个为真,整个结果就为真,因此过滤到结果集中

注意:不要使用带数值的引号 - 它们只能用于字符串(或日期)

于 2012-08-15T15:05:29.970 回答
1

您可以在 WHERE 语句中使用括号:

WHERE customer = '123' and asofdate = '2012-01-01' and
      (abc !='0' or abcd !='0' or abcde !='0' or abcdef !='0')
于 2012-08-15T15:06:01.940 回答
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')
于 2012-08-15T15:06:40.550 回答