【问题标题】:Access Query not recognizing values from sub queries访问查询无法识别来自子查询的值
【发布时间】:2016-05-03 16:31:52
【问题描述】:

以下查询在 2 个单独的表上的子查询中完成聚合计算,并将这些值传递给主查询。

(请注意上面的消息和以下发布的代码已根据 Andre 的 cmets 进行了更新。由于错误,原始代码没有运行。)

SELECT
     totSales.[Month]  & " /" AS [Month], 
     totSales.[Year] AS [Year],
     SALES_REP.rep_name AS [Sales Person],
     Sum(totSales.[Total Sales]) AS [Total Sales], 
     Sum(totSales.[Gross Commission]) AS [Gross Commission],
     Sum(Nz(totReturns.[Sales Returns],0)) AS [Sales Returns],
     Sum(Nz(totReturns.[Lost Commission],0)) AS [Lost Commission],
     Round([Gross Commission]-[Lost Commission]) AS [Net Commission]

    FROM SALES_REP

     INNER JOIN
     (

    (SELECT

        Format(SALES_RECEIPT.sale_date,'yyyy') AS [Year], 
        Format(SALES_RECEIPT.sale_date,'mm') AS [Month], 
        Sales_receipt.inventory_id, SALES_RECEIPT.rep_id, 
        ( SALES_RECEIPT.selling_price *  SALES_RECEIPT.quantity) AS [Total Sales], 
        ((Nz(SALES_RECEIPT.selling_price, 0) * Nz( SALES_RECEIPT.quantity, 0)) * (Nz(SALES_RECEIPT.commission_percent, 100) * 0.001)) AS [Gross Commission]

    FROM SALES_RECEIPT
    WHERE SALES_RECEIPT.sale_date Between #1/1/2000# And #12/31/2050#) AS totSales

    LEFT JOIN

    (SELECT
        RETURNS.rep_id, returns.inventory_id, (Nz(RETURNS.selling_price)) * (Nz(RETURNS.quantity)) AS [Sales Returns],
        ((Nz(RETURNS.selling_price, 0) * Nz(RETURNS.quantity, 0)) * (Nz(RETURNS.commission_percent, 100) * 0.001)) AS [Lost Commission]

    FROM RETURNS
    WHERE RETURNS.return_date Between #1/1/2000# And #12/31/2050#)  AS totReturns
    ON totSales.inventory_id = totReturns.inventory_id)

    ON SALES_REP.rep_id = totSales.REP_ID

    GROUP BY
    totSales.[Year]
    , totSales.[Month]
    , SALES_REP.rep_name
    ;

【问题讨论】:

    标签: ms-access subquery aggregate


    【解决方案1】:

    第二次尝试,根据您的原始查询 - 可以解释您遇到的所有错误:

    • totSales.Year-Month:您必须将其放在方括号中,在 SELECT 和 GROUP BY 子句中:totSales.[Year-Month]
      否则会被解释为[totSales.Year] minus [Month]

    • SELECT SUM(totReturns.[Return Sales]) 但在totReturns 中你有AS [Returns Sales](注意 Returns 中额外的“s”)。

    • TotCommissions, TotLostCommissions:这两个字段没有在 FROM 子句的任何地方定义。

    【讨论】:

    • 感谢您的更新,我在上面发布了我的最新代码以及修改后的消息。查询运行没有错误,但“总销售额”值是应有的值的两倍。 “销售回报”值不正确,许多“销售回报”值是“总销售额”金额的 3 或 4 倍,这还差得很远。
    • 如果我将 Nz 函数添加到以下代码行,我会收到错误:“标准表达式中的数据类型不匹配。” Nz(RETURNS. sell_price * RETURNS.quantity) AS [Return Sales],由于有几个月没有回报,我想使用 Nz 函数,所以我得到零而不是空值。
    • @CodeMechanik:我对错误的数字无能为力——也许连接会创建重复的记录,然后对其进行汇总。您应该在一个新问题中使用带有示例数据的SQL Fiddle 提出这个问题。
    • @CodeMechanik:对于 Nz(),请尝试使用与 [Lost Commission] 相同的结构 - 每列周围的 Nz()。
    • 感谢您的帮助。该问题已通过以下代码行解决:第二个子查询的 ON totSales.inventory_id = totReturns.inventory_id)。原来是用 rep_id 完成的,但需要使用不同的外键链接两个表(inventory_id 在两个表中)。
    猜你喜欢
    • 2022-12-01
    • 2019-05-15
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 2020-08-29
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多