我正在使用MS Access 2003/2007。SQL自動擴展關係
這是一個簡化的場景,但希望有助於澄清。我有一個名爲TableAB
表由2列如下:
FieldA
用於填充用戶窗體列表框多選,然後允許用戶選擇一個或多個項目進行搜索。然後使用所選項目搜索包含數千條記錄的單獨主表。
FieldB
描述了FieldA
中某些項目之間的4個關係集合(9,10,19和28),並允許我們自動擴展搜索選擇,如果單獨的「自動」用戶開關啓用。
例如,如果選擇的搜索項目是2,10和11,則自動擴展搜索將是2,10,11,25,26,34,66。這裏,25,26,34和66是自動包含的。
我可以自動展開使用上面的示例如下:
SELECT FieldA
FROM TableAB
WHERE FieldA In (2,10,11) Or FieldB In (2,10,11);
我的問題:
當用戶選擇的特定關係的所有項目,但不會選擇說明主項(FieldB
中的項目),那麼,我希望該項目被自動包含(不需要用戶切換,因爲應該總是包含缺失的項目)。
例如,如果用戶選擇23和24然後我想9被包括 - 但僅提供用戶輸入的兩個23和24
我可以使用返回主關係項目的下列作爲實例:
SELECT DISTINCT FieldB
FROM tblABC
WHERE (FieldA In (1,2,9,30,68) And FieldB <> Null) Or FieldB In(1,2,9,30,68);
但我發現很難,因爲我有限的SQL知識,想辦法達到我的目的只是/優雅而不訴諸接口過多使用Visual Basic,這是我可以做的,但寧願不要。任何幫助/指針將不勝感激。
感謝您的快速響應!在HAVING SUM(IIF(FieldA in(9),1,0))末尾放置缺少的右括號,結果與我想要的非常接近,但仍然存在問題。 「In(9)」將代替用戶選擇。如果我用(9)替代(23,24),那麼返回值是9,23,24 - 正是我想要的。但是,如果我輸入(23,24,68,69),那麼回報是23,24,68,69 - 它應該包括9和28. – Jim 2014-12-06 23:47:08
@Jim。 。 。非常有趣的情況。如果您有多個完整的組,則原始查詢將不起作用。解決方案是一個相關的子查詢。我認爲認爲您的數據具有正確的相關性。 – 2014-12-06 23:50:14
@戈登......很多人,非常感謝你在這裏的幫助。 用(9)代替(1,2,10,23,68,69)我得到1,2,10,23,25,26,28,34,66,68,69 ...我想要的一切,但是10是自動擴大到包括我不想要的25,26,34,66。用戶選擇同時存在於字段B中的條目的自動擴展需要被限制在用戶可以啓用或禁用的交換機上。我現在有這個設施在最後的strSQL構建之前在其他地方工作。 – Jim 2014-12-07 00:55:56