如果你不想硬編碼在您的查詢的可能值,你可以使用一個簡單的一招:創建一個新的小桌子與你所需要的匹配值。
例如,您可以創建一個新表如下所示:
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」變量時,只有一個(三分之一)子查詢會返回記錄集。
是否可以編寫一個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
我用另一個例子更新了我的答案,沒有額外的表,你不喜歡... :)我希望這可以幫助你... –
感謝您的加入 '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