MS-Access SQL子查询具有相同的值问题

时间:2013-11-10 03:07:56

标签: sql ms-access subquery

晚上好,

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

我的表格是:

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

  

我觉得我的脑袋在这一点上爆炸了

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

谢谢。

1 个答案:

答案 0 :(得分: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 ...已经存在的内容。

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