2014-02-26 87 views
0

我有一個MS Access數據庫,用名爲Sex場。該字段可以有3個值,由查找選自:使用的MS Access查詢一個「未知」的值返回所有記錄值

Unknown Male Female

我有一個搜索表單,其中通過搜索值的查詢。

當您搜索Unknown,查詢應該返回:UnknownMaleFemale(即返回所有作爲對象的實際性行爲可能是任何東西)

當您搜索Male,查詢應該返回:UnknownMale(因爲任何Unknown性實際上可能是男性)

當您搜索Female,查詢應該返回:UnknownFemale

這是可能的查詢設計視圖中,或者我需要使用SQL?

回答

2

如果你不想硬編碼在您的查詢的可能值,你可以使用一個簡單的一招:創建一個新的小桌子與你所需要的匹配值。

例如,您可以創建一個新表如下所示:

SEX_COND - A table with two columns, for the matching values: 

V V_NEW 
- ----- 
M M 
M U 
F F 
F U 
U M 
U F 
U U 

所以,你可以寫你與QBE或SQL簡單的查詢,通過連接兩個表(SEX和SEX_COND)和過濾的新表格欄。

隨着SQL:

SELECT * 
FROM YOUR_TABLE_WITH_SEX_COL 
WHERE SEX IN (SELECT V_NEW 
       FROM SEX_COND 
       WHERE V = 'your_sex_value_to_be_filtered'); 

如果你想使用QBE,你可以指定下列條件(其中通常指定過濾條件):

In (SELECT V_NEW FROM SEX_COND WHERE V = 'M') 

如果你不這樣做想要創建一個新表格,可以使用另一個技巧(將三個性別值硬編碼):

SELECT * 
FROM YOUR_TABLE_WITH_SEX_COL 
WHERE SEX IN ('M', 'U') AND 'your_value' = 'M' 
UNION ALL 
SELECT * 
FROM YOUR_TABLE_WITH_SEX_COL 
WHERE SEX IN ('F', 'U') AND 'your_value' = 'F' 
UNION ALL 
SELECT * 
FROM YOUR_TABLE_WITH_SEX_COL 
WHERE 'your_value' = 'U'; 

當您將值傳遞給「your_value」變量時,只有一個(三分之一)子查詢會返回記錄集。

+0

是否可以編寫一個SQL中,而不是使第二個表?我還有其他幾張表,我想對同樣的事情做些事情,而且不想再製作10張表格。像這樣(只有僞代碼!) 'WHERE(IF([Forms]![Search_form![Sex])=「Male」,(tbl_Attributes.Sex)=「Male」或「Unknown」) ELSEIF ]![Search_form]![Sex])=「女」,(tbl_Attributes.Sex)=「女」或「未知」)); (tbl_Attributes.Sex)=「男」或「未知」或「女」) ELSEIF([Forms]! 「未知」或「女」) – gisol

+1

我用另一個例子更新了我的答案,沒有額外的表,你不喜歡... :)我希望這可以幫助你... –

+0

感謝您的加入 'SELECT tlk_Ele_Name [俄勒名稱],tlk_Ele_Name。[ID卡色],tlk_Ele_Name.Sex,tlk_Ele_Name。[通過IDed],tlk_Ele_Name。[裂片],tlk_Ele_Name。Tusk_length,tlk_Ele_Name.Tusk_position FROM tlk_Ele_Name WHERE tlk_Ele_Name。[Sex] IN(2,3)AND [Forms]![frm_Search and make IDs]![Sex] ='2'' 這工作正常,但是當我在它下面有第二個迭代(對於男性(1,3)和未知(1,2,3)),我得到一個錯誤,說明期望:SELECT,DELETE等。 – gisol

相關問題