Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
具有相同值的MS Access SQL子查询问题_Sql_Ms Access_Subquery - Fatal编程技术网

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

具有相同值的MS Access SQL子查询问题,sql,ms-access,subquery,Sql,Ms Access,Subquery,晚上好, 我的问题是,当我运行查询时,它拥有我想要的一切,但我的子查询似乎无法正常工作。它对我的所有客户都具有相同的价值。我真的不知道如何解决这个问题。如果我在其中添加CUSTOMER.CUS_代码,那么它会要求我使用EXISTS。那么Avg起作用了?我决定使用Avg聚合函数,我收到了同样的问题 我的桌子是: 客户(客户代码) 发票(客户代码、存货编号) 行(库存编号、行编号、行单位、行价格) 在这个问题中,我正在尝试使用一个子查询来获取每个客户每种产品的平均购买金额 SELECT CUST

晚上好,

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

我的桌子是:

  • 客户(客户代码)
  • 发票(客户代码、存货编号)
  • 行(库存编号、行编号、行单位、行价格)
在这个问题中,我正在尝试使用一个子查询来获取每个客户每种产品的平均购买金额

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;
我的错误似乎在实现子查询的方式上。如何使每个客户的平均值。例如,在发票表中,我有许多客户有多张发票,因此他们订购了许多不同的项目。因此,对于同一客户的每张发票,我要计算平均价格,然后根据他们订购的产品数量计算平均价格

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

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

谢谢。

首先

您需要查看子查询中的where子句。您正在比较INVOICE.INV\u NUMBER=LINE.INV\u NUMBER的位置。 问题是您没有完全连接到CUSTOMER表中的CUS_代码,因此拦截器不知道您希望为每个单独的客户执行此操作。简单的修复

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和…已经存在的内容

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