【问题标题】:MS-Access SQL Subquery with same values issue具有相同值的 MS-Access SQL 子查询问题
【发布时间】:2013-11-10 03:07:56
【问题描述】:

晚上好,

我的问题是,当我运行查询时,它拥有我想要的一切,但我的子查询似乎无法正常工作。它对我所有的客户都有相同的价值。我真的不知道如何解决这个问题。如果我在其中添加 CUSTOMER.CUS_CODE,那么它会要求我使用 EXISTS。所以平均工作正常吗?我决定使用 Avg 聚合函数,但遇到了同样的问题。

我的表格是:

  • 客户(CUS_CODE)
  • INVOICE(CUS_CODE, INV_NUMBER)
  • LINE(INV_NUMBER, LINE_NUMBER, LINE_UNITS,LINE_PRICE)

在这个问题中,我正在尝试使用子查询获取每个客户生产的每件产品的平均购买量。

SELECT CUSTOMER.CUS_CODE, CUS_FNAME+" "+CUS_LNAME AS Name, CUSTOMER.CUS_BALANCE, Sum([LINE]![LINE_NUMBER]*
[LINE]![LINE_PRICE]) AS Total_purchases, Count(INVOICE.INV_NUMBER) AS Number_of_purchases, 
(
SELECT Avg([LINE]![LINE_NUMBER]*[LINE]![LINE_PRICE])
FROM INVOICE, LINE
WHERE INVOICE.INV_NUMBER = LINE.INV_NUMBER
) AS Average_purchase_amount

FROM CUSTOMER, INVOICE, LINE
WHERE ((CUSTOMER.CUS_CODE)=[INVOICE].[CUS_CODE]) AND ((INVOICE.INV_NUMBER)=[LINE].[INV_NUMBER])
GROUP BY CUSTOMER.CUS_CODE, CUS_FNAME+" "+CUS_LNAME, CUSTOMER.CUS_BALANCE;

我的错误似乎在于我实现子查询的方式。我如何使每个客户的平均水平。例如,在 INVOICE 表中,我有许多拥有多张发票的客户,因此他们订购了许多不同的物品。因此,对于同一客户的每张发票,我想计算平均价格,然后根据他们订购的产品数量取该价格的平均值。

此时我觉得我的头要爆炸了

如果您有任何问题或需要更多信息,我会更新。

谢谢。

【问题讨论】:

    标签: sql ms-access subquery


    【解决方案1】:

    第一

    您需要查看子查询中的 where 子句。您正在比较 INVOICE.INV_NUMBER = LINE.INV_NUMBER 的位置。 问题是您没有一直连接到 CUSTOMER 表中的 CUS_CODE,因此拦截器不知道您要为每个单独的客户执行此操作。简单的修复。

    SELECT CUSTOMER.CUS_CODE, CUS_FNAME+" "+CUS_LNAME AS Name, CUSTOMER.CUS_BALANCE, Sum([LINE]![LINE_NUMBER]*  
    [LINE]![LINE_PRICE]) AS Total_purchases, Count(INVOICE.INV_NUMBER) AS Number_of_purchases, 
    
    (
    SELECT Avg([LINE]![LINE_NUMBER]*[LINE]![LINE_PRICE])
    FROM INVOICE, LINE
    WHERE CUSTOMER.CUS_CODE = INVOICE.CUS_CODE AND INVOICE.INV_NUMBER = LINE.INV_NUMBER
    ) AS Average_purchase_amount
    
    FROM CUSTOMER, INVOICE, LINE
    WHERE ((CUSTOMER.CUS_CODE)=[INVOICE].[CUS_CODE]) AND ((INVOICE.INV_NUMBER)=[LINE].[INV_NUMBER])
    GROUP BY CUSTOMER.CUS_CODE, CUS_FNAME+" "+CUS_LNAME, CUSTOMER.CUS_BALANCE;
    

    如您所见,我在第一个 WHERE 子句中添加了 CUSTOMER.CUS_CODE = INVOICE.CUS_CODE AND ...已经存在的内容。

    现在,它应该计算客户拥有的每张发票,然后将这些金额相加并合计,然后取平均值。

    【讨论】:

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