根据多个字段查询

问题描述:

不知道如何标题,但这里是我的场景根据多个字段查询

在WebMatrix上工作,内置于sqlCE数据库。

有多个位字段(3场)的表

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

我的查询看起来像这样

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

现在,如果我搜索CLID = 28我得到7条,并与上面的查询也得到7条记录。 Se基本上是哪里条件不起作用的第二部分。

感谢您的帮助和帮助。

感谢,

加成 数据看起来这

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 

如果您需要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)

+0

这将跳过所有我不想忽略的NULL值,我的意思是,我们知道有7条记录,并且只有其中2个具有所有位字段为True。这将返回上述查询,它将跳过所有其他字段。 – cjv 2014-09-29 08:00:37

+0

@cjv是否希望将'NULL'视为'False'或'True'? – 2014-09-29 08:06:16

+0

逻辑上认为是正确的。 – cjv 2014-09-29 08:08:22

我想你可能具备的条件是错误的。这:

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

说让行,其中字段的任何(或全部)是不假,这意味着一些(或全部)真正的行会匹配。你可能希望这样的:

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

使用bitwise logical and&连同COALESCE()确保只有当所有列是真实的或空行返回。这将返回示例数据中的所有行,但PApproved为False的行除外。

如果你只是想所有的真值(治疗无效为假)行则:

where (VApproved & PApproved & CApproved) = 1 

将做到这一点。这将返回样本中的前两行。

+0

isnull语法的一些问题 – cjv 2014-09-29 08:24:41

+0

isnull有什么问题? – jpw 2014-09-29 08:25:48

+0

err味精是:为该功能指定的参数数量不正确。 [最小参数数量= 1,最大参数数量= 1,函数名称(如果已知)= isnull] – cjv 2014-09-29 08:28:46