基于多个字段的查询

时间:2014-09-29 07:46:42

标签: sql sql-server-ce

不确定如何标题,但这是我的方案

在Webmatrix上工作,内置在sqlCE DB中。

有一个包含多个位域(3个字段)的表

我需要的是搜索所有记录但跳过这三个位字段中的任何一个为假的记录

我的查询看起来像这样

Select * From Tr where Tr.ClID=28 and (VApproved<>'False' or PApproved<>'False' or CApproved<>'False')

现在,如果我搜索ClID = 28,我会获得7条记录,并且上述查询也会得到7条记录。 Se基本上是where条件不起作用的第二部分。

感谢您的帮助和帮助。

谢谢,

加成 数据看起来像这样

ClID    VApproved    PApproved    CApproved
****    *********    *********    *********
28      True         True         True
28      True         True         True
28      NULL         True         True
28      NULL         True         True
28      NULL         True         True
28      NULL         True         True
28      NULL         False        True

2 个答案:

答案 0 :(得分:1)

如果你需要跳过False值的任何值,那么你只是你的条件不正确,它应该是:

Select * From Tr where Tr.ClID=28 and VApproved<>'False' and PApproved<>'False' and CApproved<>'False'

即。所有这些都不能是假的,所以我们使用AND而不是OR。考虑到你的NULL要求,它应该是这样的:

Select * From Tr where Tr.ClID=28 and (VApproved=1 OR VApproved IS NULL) and (PApproved=1 OR PApproved IS NULL) and (CApproved=1 OR PApproved IS NULL)

答案 1 :(得分:0)

我认为你的病情可能不对。这样:

and (VApproved<>'False' or PApproved<>'False' or CApproved<>'False')

表示要获取任何(或所有)字段不为false的行,这意味着一些(或全部)true的行将匹配。你可能想要这个:

(coalesce(VApproved,1) & coalesce(PApproved,1) & coalesce(CApproved,1)) = 1

bitwise logical and &与coalesce()一起使用可确保只返回所有列为true或null的行。这将返回示例数据中的所有行,但PApproved为False的行除外。

如果您只想要具有所有真值的行(将null视为false),则:

where (VApproved & PApproved & CApproved) = 1

会做到的。这将仅返回样本中的前两行。