2014-09-29 89 views
0

不知道如何標題,但這裏是我的場景根據多個字段查詢

在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 

回答

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)

+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

0

我想你可能具備的條件是錯誤的。這:

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