Ms access Access查询无法识别子查询中的值

Ms access Access查询无法识别子查询中的值,ms-access,subquery,aggregate,Ms Access,Subquery,Aggregate,以下查询在两个单独表的子查询中进行了聚合计算,这些值将传递给主查询 (注意上面的消息和下面发布的代码已经根据Andre的评论进行了更新。由于错误,原始代码没有运行。) 第二次尝试,基于您的原始查询-您得到的所有错误都可以解释: totSales.Year-Month:必须将其放在方括号中,包括在SELECT和GROUP BY子句中:totSales.[Year-Month] 否则它将被解释为[totSales.Year]减去[Month] 选择SUM(totReturns.[Return Sa

以下查询在两个单独表的子查询中进行了聚合计算,这些值将传递给主查询

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


第二次尝试,基于您的原始查询-您得到的所有错误都可以解释:

  • totSales.Year-Month
    :必须将其放在方括号中,包括在SELECT和GROUP BY子句中:
    totSales.[Year-Month]

    否则它将被解释为
    [totSales.Year]减去[Month]

  • 选择SUM(totReturns.[Return Sales])
    但在
    totReturns
    中,您有
    作为[Returns Sales]
    (注意退货中的额外“s”)

  • TotCommissions、TotLostCommissions
    :这两个字段未在FROM子句中的任何位置定义


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

  • totSales.Year-Month
    :必须将其放在方括号中,包括在SELECT和GROUP BY子句中:
    totSales.[Year-Month]

    否则它将被解释为
    [totSales.Year]减去[Month]

  • 选择SUM(totReturns.[Return Sales])
    但在
    totReturns
    中,您有
    作为[Returns Sales]
    (注意退货中的额外“s”)

  • TotCommissions、TotLostCommissions
    :这两个字段未在FROM子句中的任何位置定义


感谢您的更新,我已在上面发布了我的最新代码和修改后的消息。查询运行时没有错误,但“Total Sales”值是其应该值的两倍。“Sales Returns”(销售退货)值不正确,许多“Sales Returns”(销售退货)值是“Total Sales”(总销售额)值的3或4倍,这是非常不正确的。如果我将Nz函数添加到以下代码行中,我会得到错误:“criteria expression中的数据类型不匹配。”Nz(RETURNS.salling_price*RETURNS.quantity)作为[退货销售],因为有些月份没有返回值,所以我想使用Nz函数,这样我就可以得到零而不是空值。@CodeMechanik:我不能帮助处理错误的数字-也许一个联接会创建重复的记录,然后进行汇总。你应该在一个新问题中问这个问题,并提供一个示例数据。@CodeMechanik:For Nz(),尝试在每列中使用与[Lost Commission]-Nz()相同的结构。感谢您的帮助。问题已通过以下代码行得到解决:第二个子查询的ON totSales.inventory\u id=totReturns.inventory\u id)。最初它是用rep_id完成的,但有必要使用不同的外键链接两个表(inventory_id在两个表中)。感谢更新,我在上面发布了我的最新代码和修订的消息。查询运行时没有错误,但“Total Sales”值是其应该值的两倍。“Sales Returns”(销售退货)值不正确,许多“Sales Returns”(销售退货)值是“Total Sales”(总销售额)值的3或4倍,这是非常不正确的。如果我将Nz函数添加到以下代码行中,我会得到错误:“criteria expression中的数据类型不匹配。”Nz(RETURNS.salling_price*RETURNS.quantity)作为[退货销售],因为有些月份没有返回值,所以我想使用Nz函数,这样我就可以得到零而不是空值。@CodeMechanik:我不能帮助处理错误的数字-也许一个联接会创建重复的记录,然后进行汇总。你应该在一个新问题中问这个问题,并提供一个示例数据。@CodeMechanik:For Nz(),尝试在每列中使用与[Lost Commission]-Nz()相同的结构。感谢您的帮助。问题已通过以下代码行得到解决:第二个子查询的ON totSales.inventory\u id=totReturns.inventory\u id)。最初它是用rep_id完成的,但有必要使用不同的外键链接两个表(inventory_id在两个表中)。
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
    ;