【问题标题】:How to join two of the same query with a different parameter (MS Access)如何使用不同的参数连接两个相同的查询(MS Access)
【发布时间】:2013-08-05 20:33:24
【问题描述】:

我在 MSAccess 中有一个名为 ClaimQry 的查询,它提示用户输入参数 valuationDate。我想以某个评估日期运行ClaimQry,例如,2011 年 1 月 1 日,然后以另一个评估日期 2012 年 1 月 1 日运行相同的查询,并基于字段 claimNumber 加入两个结果集。

我试过了

SELECT ClaimQuery.Total, ClaimQuery_1.Total
FROM ClaimQuery 
INNER JOIN ClaimQuery AS ClaimQuery_1 ON ClaimQuery.[Claim #] = ClaimQuery_1.[Claim #];

但我只被提示输入一个估值日期而不是两个(因此我的结果数据不正确)。

编辑:开始认为我的问题可能不清楚,所以我会尝试举个例子。

假设我运行 ClaimQuery 并在 2011 年 1 月 1 日为其提供 valuationDate 参数。我可能会得到类似的结果集

Claim# Total
123    100
231    200
132    300

然后我运行 ClaimQuery 并在 2012 年 1 月 1 日为 valuationDate 参数输入它,我得到了

Claim# Total
123    400
231    500
132    100
213    600

现在,我想对这两个集合执行连接,并得到类似的东西

Claim# Total1 Total2
123    100    400
231    200    500
132    300    100

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    我不相信 Access 将允许您构建一个使用两次参数查询并让数据库引擎识别相同参数名称的两个单独实例的查询。

    我怀疑你能得到的最接近的方法是将查询添加为一个数据源,并添加一个使用第一个查询的 SQL 但参数名称不同的子查询。

    所以如果 ClaimQry 看起来像这样......

    PARAMETERS date1 DateTime;
    SELECT [Total], [Claim #]
    FROM YourTable
    WHERE date_field = [date1];
    

    这个查询应该可以工作...

    PARAMETERS date2 DateTime;
    SELECT ClaimQuery.Total, ClaimQuery_1.Total
    FROM
        ClaimQuery 
        INNER JOIN
            (
                SELECT [Total], [Claim #]
                FROM YourTable
                WHERE date_field = [date2]
            ) AS ClaimQuery_1
    ON ClaimQuery.[Claim #] = ClaimQuery_1.[Claim #];
    

    这可能只是您想要的一半。但我不相信我们能帮您解决剩下的问题。

    【讨论】:

      【解决方案2】:

      我所做的是保存相同查询的 2 个实例,并在其中一个实例上设置 year(P)-1,所以后来我用 union all 调用这两个实例,它们共享相同的参数 -> 只需 1 个输入 2 个结果

      select * from
      Query_1 
      union all 
      select * from
      Query_1_1
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-13
        • 1970-01-01
        • 2021-03-30
        • 1970-01-01
        • 2012-04-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多