0

晚上好,

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

我的表是:

  • 客户(CUS_CODE)
  • 发票(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 表中,我有许多拥有多张发票的客户,因此他们订购了许多不同的物品。因此,对于同一客户的每张发票,我想计算平均价格,然后根据他们订购的产品数量取该价格的平均值。

我觉得我的头在这一点上爆炸

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

谢谢你。

4

1 回答 1

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 ...已经存在的内容。

现在它应该通过计算客户拥有的每张发票来工作,然后将金额相加并总计并取平均值。

于 2013-11-10T03:19:28.113 回答