我正在使用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