【问题标题】:Microsoft Access 2016: Conditional Inner Join Multiple CasesMicrosoft Access 2016:条件内连接多个案例
【发布时间】:2018-05-14 19:43:13
【问题描述】:

我希望我的要求是有意义的。我想要一个查询,根据用户输入选择特定类型的内部联接。

这就是我所拥有的。

查询:

  • qryFiltered(主查询)
  • qryLand(子)
  • qrySea(子)
  • qryAllOrder(子)

表格:

  • tblLowPriority

表格:

  • EnterWork(有一个名为 ogLandSea 的选项组)

在我的主查询“qryFiltered”中,我有以下 SQL 代码:

SELECT qryAllOrder.*

FROM
SWITCH
(Forms!EnterWork!ogLandSea = 1, (qryAllOrder LEFT JOIN tblLowPriority ON qryAllOrder.[WORK_ORDER_NBR] = tblLowPriority.[WO]) INNER JOIN qrySea ON qryAllOrder.WORK_ORDER_NBR = qrySea.WORK_ORDER_NBR,

Forms!EnterWork!ogLandSea = 2, (qryAllOrder LEFT JOIN tblLowPriority ON qryAllOrder.[WORK_ORDER_NBR] = tblLowPriority.[WO]) INNER JOIN qryLand ON qryAllOrder.WORK_ORDER_NBR = qryLand.WORK_ORDER_NBR)

WHERE tblLowPriority.WO Is Null

基本上,我正在寻找的是根据用户在表单上选择的内容来选择加入。内部连接将根据此输入选择 qrySea 或 qryLand。我得到的错误是:“FROM 子句中的语法错误。”

我在这里做错了什么?是开关功能不起作用。我在没有切换功能的情况下分别尝试了陆地和海洋两个选项,它可以工作。我似乎无法找到一种方法来根据用户输入更改内部联接。

感谢您的所有回复!

【问题讨论】:

  • 不支持该语法。可能还有其他方法可以产生您想要的结果,但为此您需要分享有关表、结构、表中的数据、查询定义的更多详细信息。也许更容易将您的数据库发布到某个地方。
  • 构建一个查询和一个报告,并根据用户选择将过滤条件应用于报告。

标签: sql ms-access join switch-statement


【解决方案1】:

我可以通过从主查询到两个子查询的左连接来实现这一点。然后我在 WHERE 子句中添加了一个 Switch 条件:

WHERE (Switch([Forms]![EnterWork]![ogLandSea]=1,[qrySea]![WORK_ORDER_NBR] Is Not Null Or [qrySea]![WORK_ORDER_NBR] Is Null Or [qryLand]![WORK_ORDER_NBR] Is Not Null,[Forms]![EnterWork]![ogLandSea]=2,[qrySea]![WORK_ORDER_NBR] Is Not Null,[Forms]![EnterWork]![ogLandSea]=3,[qryLand]![WORK_ORDER_NBR] Is Not Null,[Forms]![EnterWork]![ogFN]=4,[qrySea]![WORK_ORDER_NBR] Is Null And [qryLand]![WORK_ORDER_NBR] Is Null))<>False)

基本上,它就是这样做的:

  • 选项 1:显示主查询中的所有记录
  • 选项 2:仅显示 qrySea 中的记录
  • 选项 3:仅显示 qryLand 中的记录
  • 选项 4:仅显示不在 qrySea 和 qryLand 中的记录

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多